首页 > 解决方案 > 部署 cockroachdb-client-secure 的问题

问题描述

我正在关注这个 helm + secure - 指南:

https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes.html#helm

我使用以下命令部署了集群:$ helm install my-release --values my-values.yaml cockroachdb/cockroachdb --namespace=thesis-crdb

这是它的外观:$ helm list --namespace=thesis-crdb

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                      APP VERSION
my-release      thesis-crdb     1               2021-01-31 17:38:52.8102378 +0100 CET   deployed        cockroachdb-5.0.4                          20.2.4

以下是它的外观:$ kubectl get all --namespace=thesis-crdb

NAME                                    READY   STATUS      RESTARTS   AGE
pod/my-release-cockroachdb-0            1/1     Running     0          7m35s
pod/my-release-cockroachdb-1            1/1     Running     0          7m35s
pod/my-release-cockroachdb-2            1/1     Running     0          7m35s
pod/my-release-cockroachdb-init-fhzdn   0/1     Completed   0          7m35s

NAME                                    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
service/my-release-cockroachdb          ClusterIP   None         <none>        26257/TCP,8080/TCP   7m35s
service/my-release-cockroachdb-public   ClusterIP   10.xx.xx.x   <none>        26257/TCP,8080/TCP   7m35s

NAME                                      READY   AGE
statefulset.apps/my-release-cockroachdb   3/3     7m35s

NAME                                    COMPLETIONS   DURATION   AGE
job.batch/my-release-cockroachdb-init   1/1           43s        7m36s

my-values.yaml-file 中,我只将 tls 从更改falsetrue

tls:
  enabled: true

到目前为止一切都很好,但是从这里开始,指南不再对我有用了。我尝试按照他们所说的获取 csr:kubectl get csr --namespace=thesis-crdb

No resources found

好吧,也许不需要。我继续部署client-secure 我下载的文件:https ://raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/kubernetes/client-secure.yaml

并将 更改serviceAccountName: cockroachdbserviceAccountName: my-release-cockroachdb

我尝试使用它来部署它,$ kubectl create -f client-secure.yaml --namespace=thesis-crdb但它会引发此错误:

Error from server (Forbidden): error when creating "client-secure.yaml": pods "cockroachdb-client-secure" is forbidden: error looking up service account thesis-crdb/my-release-cockroachdb: serviceaccount "my-release-cockroachdb" not found

有人知道如何解决这个问题吗?我很确定是命名空间搞砸了它。

我试图将命名空间放在元数据部分

metadata:
  namespace: thesis-crdb

然后尝试部署它:kubectl create -f client-secure.yaml但无济于事:

Error from server (Forbidden): error when creating "client-secure.yaml": pods "cockroachdb-client-secure" is forbidden: error looking up service account thesis-crdb/my-release-cockroachdb: serviceaccount "my-release-cockroachdb" not found

标签: kubernetesdeploymentcockroachdb

解决方案


您提到您serviceAccountName在 YAML 中已更改。

并将 更改serviceAccountName: cockroachdbserviceAccountName: my-release-cockroachdb

因此,您的问题的根本原因与ServiceAccount配置错误有关。

背景

在您的集群中,您有一个名为ServiceAccount.

当您(人类)访问集群(例如,使用 kubectl)时,您会被 apiserver 验证为特定的用户帐户(当前通常是 admin,除非您的集群管理员自定义了您的集群)。pod 内容器中的进程也可以联系 apiserver。当他们这样做时,他们被认证为特定的服务帐户(例如,默认)。

ServiceAccount还应该配置RBAC,它授予您创建资源的权限。

基于角色的访问控制 (RBAC) 是一种根据组织内各个用户的角色来调节对计算机或网络资源的访问的方法。

RBAC 授权使用 rbac.authorization.k8s.io API 组来驱动授权决策,允许您通过 Kubernetes API 动态配置策略。

如果您没有适当的RBAC权限,您将无法创建资源。

在 Kubernetes 中,您可以找到Role 和 ClusterRoleRole在特定命名空间ClusterRole中设置权限并在整个集群中设置权限。除此之外,您还需要使用RoleBinding 和 ClusterRoleBinding来绑定角色。

此外,如果您要使用云环境,您还需要项目中的特殊权限。您的指南在此处提供了操作说明。

根本原因

我检查了cockroachdb 图表,它创建了ServiceAccount, Role,ClusterRole和for RoleBindingand 。没有配置。ClusterRoleBindingcockroachdbprometheusmy-release-cockroachdb

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cockroachdb
...
  verbs:
  - create
  - get
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cockroachdb
  labels:
    app: cockroachdb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cockroachdb
...

client-secure.yaml您更改serviceAccountName为时my-release-cockroachdb,Kubernetes 无法找到它,ServiceAccount因为它不是由cluster administratoror创建的cockroachdb chart

ServiceAccounts默认列出,namespace您可以使用 command $ kubectl get ServiceAccount,但是如果您要检查ServiceAccounts集群中的所有内容,您应该添加-A到您的 command - $ kubectl get ServiceAccount -A

解决方案

选项 1是使用ServiceAccount具有适当权限的现有,例如SAcockroachdb chartwhich is cockroachdb,not创建my-release-cockroachdb

选项 2是创建ServiceAccount,Role/ClusterRoleRoleBinding/ClusterRoleBindingmy-release-cockroachdb.


推荐阅读