如何解决部署 cockroachdb-client-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
文件中,我只将 tls 从 false
更改为 true
:
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: cockroachdb
更改为 serviceAccountName: 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
解决方法
您提到您在 YAML 中更改了 serviceAccountName
。
并将 serviceAccountName: cockroachdb
更改为 serviceAccountName: my-release-cockroachdb
。
因此,您问题的根本原因与 ServiceAccount 配置错误有关。
背景
在您的集群中,您有一个名为 ServiceAccount
的东西。
当您(人类)访问集群时(例如,使用 kubectl),您将被 apiserver 验证为特定用户帐户(目前通常为 admin,除非您的集群管理员已自定义您的集群)。 Pod 内容器中的进程也可以联系 apiserver。当他们这样做时,他们被验证为特定的服务帐户(例如,默认)。
对于 ServiceAccount
,您还应该配置 RBAC,授予您创建资源的权限。
基于角色的访问控制 (RBAC) 是一种根据组织内单个用户的角色来调节对计算机或网络资源的访问的方法。
RBAC 授权使用 rbac.authorization.k8s.io API 组来驱动授权决策,允许您通过 Kubernetes API 动态配置策略。
如果您没有适当的 RBAC
权限,您将无法创建资源。
在 Kubernetes 中,您可以找到 Role and ClusterRole。 Role
设置特定命名空间内的权限,而 ClusterRole
设置整个集群中的权限。
除此之外,您还需要使用 RoleBinding and ClusterRoleBinding 绑定角色。
此外,如果您使用云环境,您还需要项目中的特殊权限。您的指南提供了操作说明here。
根本原因
我检查了 cockroachdb chart,它为 ServiceAccount
创建了 Role
、ClusterRole
、RoleBinding
、ClusterRoleBinding
和 cockroachdb
和prometheus
。 my-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 administrator
或 cockroachdb chart
创建的。
要在默认 ServiceAccounts
中列出 namespace
,您可以使用命令 $ kubectl get ServiceAccount
,但是如果您要检查集群中的所有 ServiceAccounts
,您应该将 -A
添加到您的命令 - $ kubectl get ServiceAccount -A
。
解决方案
选项 1 是使用具有适当权限的现有 ServiceAccount
,例如由 SA
创建的 cockroachdb chart
,它是 cockroachdb
,而不是 {{1} }.
选项 2 是为 my-release-cockroachdb
创建 ServiceAccount
、Role/ClusterRole
和 RoleBinding/ClusterRoleBinding
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。