我有一个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进行身份验证。我是否可以生成kubecconfig文件,将其存储在安全的地方,并一直使用它,而不是进行身份验证?换句话说,kubecconfig文件是否足以连接到我的GKE集群?
如果您的服务运行在您想要连接的GKE集群中的Pod中,请使用Kubernetes服务帐户进行身份验证。
-
创建一个Kubernetes服务帐户并将其附加到您的Pod。如果您的Pod已经有Kubernetes服务帐户,您可以跳过此步骤。
-
使用Kubernetes RBAC授予Kubernetes服务帐户正确的权限。
下面的示例授予editprod中的权限名称空间:
kubectl create rolebinding yourserviceaccount
--clusterrole=edit
--serviceaccount=yournamespace:yourserviceaccount
--namespace=prod
- 在运行时,当您的服务调用
kubectl
时,它会自动接收您配置的凭据。
您还可以将凭据存储为秘密并将其挂载到pod上,以便它可以从那里读取它们
要在工作负载中使用Secret,您可以指定引用Secret值的环境变量,或者挂载包含Secret的卷。
您可以使用命令行或YAML文件创建Secret。
下面是一个使用命令行 的示例kubectl create secret SECRET_TYPE SECRET_NAME DATA
SECRET_TYPE:
Secret类型,它可以是下列之一:
generic:
从本地文件、目录或文字值创建Secretdocker-registry:
创建dockercfg
Secret用于Docker注册表。用于对Docker注册表进行身份验证。tls:
从给定的公钥/私钥对创建TLS秘密。公钥/私钥对必须已经存在。公钥证书必须是。pem编码,并且与给定的私钥匹配。
对于大多数秘密,您使用generic
类型。
SECRET_NAME:
您正在创建的Secret的名称。
DATA:
要添加到Secret中的数据,可以是下列任意一种:
- 包含一个或多个配置文件的目录的路径,使用
--from-file
或--from-env-file
标志表示。 - 键值对,每个都使用
--from-literal
标志指定。
如果您需要更多关于kubectl create
的信息,您可以查看参考文档