我是kubernetes的新手,在Google云平台上创建了一个群集。 现在我正在尝试从vsts设置自动部署,需要为此创建一个kubernetes用户来获取用于身份验证的kubeconfig文件。
现在我的问题是我该怎么做? 我是否需要使用kubectl创建此用户(如果是,如何?)? 或者有没有办法通过gcp控制台创建用户?
我在网上搜索但发现没有任何效果。谢谢你的任何建议!
修改
我现在如何使用此gcloud命令连接到我的群集:gcloud container clusters get-credentials
。这在我的本地开发机器上工作得非常好。
但是在我的vsts构建代理上我没有安装gcloud(也不想安装它)并且只需要使用kubectl连接到我的集群而不使用gcloud命令。
我已经发现gcloud命令使用gcloud命令创建一个kubeconfig文件作为auth提供程序(所以我不能复制创建的kubeconifg文件casue它取决于安装的gcloud)。当我运行kubectl时,它会在kubeconfig中创建一个临时访问令牌。但此令牌仅在约30分钟内有效。 我需要一个无限有效的令牌,所以我可以在我的构建服务器上使用它。
答案 0 :(得分:1)
要在GCP中连接Kubernetes群集,您可以使用用户或服务帐户。
如果选择用户帐户,请运行以下命令:
gcloud init
或
gcloud init --console-only
这将打开GCP身份验证对话框。通过身份验证后,您将能够在经过身份验证的用户的许可下运行。
如果选择服务帐户,则需要创建服务帐户并为其生成新密钥。
您可以使用 GPC控制台 - >进行此操作 IAM&管理员 - > IAM - > 服务帐户
点击Create service account
,选择帐户名称,选择相应的角色,然后点击Create
您可以通过在帐户创建对话框中选择Furnish a new private key
来生成密钥,也可以通过单击现有服务帐户行右侧的三个点并选择Create key
来生成新密钥。选择JSON格式并将文件保存在磁盘上。
然后运行命令:
gcloud auth activate-service-account <service@account.name> --key-file=<previously_saved_file.json>
在此阶段,您使用CGP进行身份验证,并准备好连接到您的Kubernetes群集:
Next命令将更新您的kubectl配置以使用您的群集。
gcloud container clusters get-credentials <cluster_name> --zone <gcp_availability_zone> --project <gcp_project_name>
您可以通过在GCP IAM管理界面中为其选择其他角色来扩展或减少帐户的权限。
官方文件:
gcloud auth activate-service-account
gcloud init
gcloud container clusters get-credentials
答案 1 :(得分:0)
简答:
创建一个RoleBinding或ClusterRoleBinding(取决于您的需要)subjects:
包含kind: User
和name: username
的对象:
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-admin-users
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: starseed
<强>解释强>
此解释假设您正在讨论启用了RBAC的群集,如果您使用的是最新版本,则几乎总是如此。
很容易被这个话题弄糊涂。用户和组仅在RoleBindings和ClusterRoleBindings的上下文中作为“主题”存在,如上所示。
上面的代码是一个YAML对象,您可以在其上执行kubectl apply -f thisfile.yml
。它会创建一个CluserRoleBinding,它将“user”(实际上只是一个字符串)绑定到名为“cluster-admin”的ClusterRole。 “cluster-admin”是默认的ClusterRoles之一。 ClusterRoles(和Roles)是API权限的集合,如下所述:https://kubernetes.io/docs/admin/authorization/rbac/#default-roles-and-role-bindings
没有用户或组的创建或删除 - 用户或组没有API对象,并且无法列出所有用户或所有组。
要理解为什么会这样,有一个基本的概念,你必须要理解 - 认证和授权是在kubernetes中完全独立的问题。身份验证涉及验证“此用户是他们所说的人”。如下所述:https://kubernetes.io/docs/admin/authentication/ - 有许多有效的身份验证方法。常见的包括令牌,用户名/密码,x509客户端证书,但还有更多。如果用户提供了kube-apiserver的--basic-auth=somefile.csv
标记中存在的用户名和密码,则kube-apiserver会知道您是该用户。如果您使用x509客户端证书,其中CommonName = starseed,并且该证书由kube-apiserver信任的CA签名,则它知道您是该用户。
此时,当您尝试进行类似kubectl get pods
的API调用时,kube-apiserver会检查哪些授权方法已启用(节点,RBAC很常见)。它会发现名为cluster-admin-users的ClusterRoleBinding的主题是用户“starseed”,因此stareed可以执行相关ClusterRole允许的任何操作。