我正在嘗試將 terraform 連接到 Kubernetes 集群,但有關 Terraform 的檔案并不清楚我應該將哪些客戶端證書用于 TLS 連接。由于我是 Kubernetes 和 Terraform 的新手,我無法弄清楚:
provider "kubernetes" {
host = "https://xxx.xxx.xxx.xxx"
client_certificate = "${file("~/.kube/client-cert.pem")}"
client_key = "${file("~/.kube/client-key.pem")}"
cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}"
}
在 /etc/kubernetes/pki 中有不止一個證書和密鑰(front-proxy-client、api-server-client、api-server-kubelet-client),我應該使用哪一個來允許 terraform 連接到我的簇 ?
編輯:這是 kubernetes 版本( kubectl 版本的輸出)
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.1", GitCommit:"632ed300f2c34f6d6d15ca4cef3d3c7073412212", GitTreeState:"clean", BuildDate:"2021-08-19T15:45:37Z", GoVersion:"go1.16.7", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}
uj5u.com熱心網友回復:
您是否在運行 terraform 的客戶端中配置了 kubectl?在這種情況下,您可以使用與 kubectl 相同的配置。像這樣
provider "kubernetes" {
config_path = "~/.kube/config"
config_context = "my-context"
}
resource "kubernetes_namespace" "example" {
metadata {
name = "my-first-namespace"
}
}
更多細節 - https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs#statically-defined-credentials
如果不配置 kubectl 很容易。您可以參考您的 kubernetes 風格/版本的檔案。您也可以使用來自已啟用 kubectl 的現有客戶端的相同 kubeconfig 檔案。確保安全地處理鑰匙。
這里提到了幾種不同的方法 - https://learn.hashicorp.com/tutorials/terraform/kubernetes-provider?in=terraform/use-case#configure-the-provider
如果您使用像 EKS、gcloud 這樣的云提供商風格,您也可以探索特定于云的插件。
uj5u.com熱心網友回復:
我發現了原因。它沒有連接到 Terraform。問題是當我設定集群時,我在 kubeadm init 命令中使用了選項 --apiserver-advertise-address=<MASTER_NODE_PRIVATE_IP> ,但是當我使用 --control-plane-endpoint=<MASTER_NODE_PUBLIC_IP> 時,它起作用了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/348589.html
標籤:ssl Kubernetes 地形
