K8s 用户案例1:为开发人员配置访问权限

1. 创建用户证书

首先,为开发人员创建一个用户证书,以便他们能够通过 kubectl 访问 Kubernetes 集群。

# 生成用户(客户端)私钥
openssl genrsa -out developer.key 2048

# 生成证书签名请求(CSR)
openssl req -new -key developer.key -out developer.csr -subj "/CN=developer/O=dev-team"

# 通过 Kubernetes CA 签署证书
openssl x509 -req -in developer.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out developer.crt -days 365

验证证书

验证客户端证书是否由 CA 签署:

openssl verify -CAfile ca.crt client.crt

使用 kubeconfig 文件连接 Kubernetes 集群

将上述生成的证书和密钥路径填入 kubeconfig 文件后,可以使用 kubectl 命令连接到 Kubernetes 集群:

kubectl get nodes --kubeconfig=/path/to/kubeconfig

2. 配置 kubeconfig 文件

为开发人员配置 kubeconfig 文件,使他们可以使用 kubectl 连接到集群。

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority: /path/to/ca.crt
    server: https://kubernetes-api-server:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: developer
  name: developer-context
current-context: developer-context
users:
- name: developer
  user:
    client-certificate: /path/to/developer.crt
    client-key: /path/to/developer.key

3. 创建 Role 和 RoleBinding

为开发人员创建一个 Role,赋予在特定命名空间中管理 Pods 的权限,并通过 RoleBinding 将这个 Role 绑定到开发人员的身份上。

role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-namespace
  name: pod-manager
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "create", "update", "delete"]

rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developer-rolebinding
  namespace: dev-namespace
subjects:
- kind: User
  name: developer
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-manager
  apiGroup: rbac.authorization.k8s.io

通过 kubectl 应用这些配置:

kubectl apply -f role.yaml
kubectl apply -f rolebinding.yaml

4. 验证

使用 kubeconfig 文件连接 Kubernetes 集群

kubectl get pods --kubeconfig=/path/to/kubeconfig

Last updated