生成 kubeconfig 文件并为 google 云进行身份验证

Generating a kubeconfig file and authenticating for google cloud

我有一个 Kubernetes 集群。在我的集群中有一个 Django 应用程序需要连接到我在 GKE 上的 Kubernetes 集群。在我的 Django 启动时(在我的 Dockerfile 中),我使用 Google Cloud 进行身份验证:

gcloud auth activate-service-account $GKE_SERVICE_ACCOUNT_NAME --key-file=$GOOGLE_APPLICATION_CREDENTIALS
gcloud config set project $GKE_PROJECT_NAME
gcloud container clusters get-credentials $GKE_CLUSTER_NAME --zone $GKE_ZONE

我不太确定是否需要在我的 Django 容器每次启动时都执行此操作,而且我不确定我是否了解 Google Cloud 的身份验证是如何工作的。我是否可以只生成我的 Kubeconfig 文件,将其存储在安全的地方并一直使用它而不是进行身份验证? 换句话说,一个 Kubeconfig 文件是否足以连接到我的 GKE 集群?

如果您的服务 运行 在您要连接的 GKE 集群内的 Pod 中,请使用 Kubernetes 服务帐户进行身份验证。

  1. 创建一个 Kubernetes 服务帐户并将其附加到您的 Pod。如果你的 Pod 已经有 Kubernetes 服务账号,可以跳过这一步。

  2. 使用 Kubernetes RBAC 授予 Kubernetes 服务帐户正确的权限。

以下示例在 prod 命名空间中授予 edit 权限:

kubectl create rolebinding yourserviceaccount \
    --clusterrole=edit \
    --serviceaccount=yournamespace:yourserviceaccount\
    --namespace=prod
  1. 在运行时,当您的服务调用 kubectl 时,它会自动接收您配置的凭据。

您还可以将凭据存储为 secret 并将其安装到您的 pod 上,以便它可以从那里读取它们

要将 Secret 用于您的工作负载,您可以指定引用 Secret 值的环境变量,或装载包含 Secret 的卷。

您可以使用命令行或 YAML 文件创建 Secret。

这是一个使用命令行的例子

kubectl create secret SECRET_TYPE SECRET_NAME DATA

SECRET_TYPE: Secret类型,可以是以下之一:

  • generic:从本地文件、目录或文字值创建 Secret。
  • docker-registry:创建一个 dockercfg 密钥以用于 Docker 注册表。用于根据 Docker 注册表进行身份验证。
  • tls:根据给定的 public/private 密钥对创建 TLS 机密。 public/private 密钥对必须已经存在。 public 密钥证书必须是 .PEM 编码的并且匹配给定的私钥。

对于大多数 Secret,您使用 generic 类型。

SECRET_NAME: 您正在创建的 Secret 的名称。

DATA:要添加到Secret中的数据,可以是以下之一:

  • 包含一个或多个配置文件的目录的路径,使用 --from-file--from-env-file 标志指示。
  • 键值对,每个都使用 --from-literal 标志指定。

如果您需要有关 kubectl create 的更多信息,您可以查看 reference documentation