不使用gcloud sdk

时间:2018-04-04 19:12:50

标签: kubernetes google-cloud-platform azure-devops kubectl

我是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分钟内有效。 我需要一个无限有效的令牌,所以我可以在我的构建服务器上使用它。

2 个答案:

答案 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: Username: 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允许的任何操作。