kubernetes - 部署 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 从更改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
解决方案
您提到您serviceAccountName
在 YAML 中已更改。
并将 更改
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 和 ClusterRole。Role
在特定命名空间ClusterRole
中设置权限并在整个集群中设置权限。除此之外,您还需要使用RoleBinding 和 ClusterRoleBinding来绑定角色。
此外,如果您要使用云环境,您还需要项目中的特殊权限。您的指南在此处提供了操作说明。
根本原因
我检查了cockroachdb 图表,它创建了ServiceAccount
, Role
,ClusterRole
和for RoleBinding
and 。没有配置。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
or创建的cockroachdb chart
。
要ServiceAccounts
默认列出,namespace
您可以使用 command $ kubectl get ServiceAccount
,但是如果您要检查ServiceAccounts
集群中的所有内容,您应该添加-A
到您的 command - $ kubectl get ServiceAccount -A
。
解决方案
选项 1是使用ServiceAccount
具有适当权限的现有,例如SA
由cockroachdb chart
which is cockroachdb
,not创建my-release-cockroachdb
。
选项 2是创建ServiceAccount
,Role/ClusterRole
并RoleBinding/ClusterRoleBinding
为my-release-cockroachdb
.
推荐阅读
- sql-server - 在缓存中保存超过 10000 条记录 - asp.net mvc
- javascript - 在 nodejs 单元测试中使用 mocha 处理不同的响应
- c# - 在 MVC ASP.NET 应用程序中记录有关上传文件的信息 - “文件”看似为 NULL
- python - 来自站点的静态文件工作,但不是来自应用程序
- google-bigquery - Datastudio 和 BigQuery 分区列
- python - 使用 Pyspark 检查 IP 地址是否在 IPNetwork 中
- javascript - 如何使用函数构造 JavaScript for 循环
- typescript - WebStorm's TypeScript Lint: Callback Parameter Type
- python - Python - 如何在多个直方图上具有相同的最大值
- azure-active-directory - 是否可以将 $filters 与 msgraph /groups/delta 一起使用?