kubeconfig 配置文件
kubeconfig 文件中 X.509 密钥说明
在 Kubernetes 的 kubeconfig 文件中,各种证书和密钥用于配置 kubectl 客户端以安全地连接到 Kubernetes 集群。这些证书和密钥通常是 X.509 格式的。以下是 kubeconfig 文件中常见的证书和密钥及其对应的 X.509 文件:
1. Certificate Authority (CA) 证书
kubeconfig 字段:certificate-authority
X.509 文件:CA 证书文件,通常是 .crt 或 .pem 后缀。
用途:用于验证集群 API 服务器的证书。客户端使用 CA 证书来确保与集群的连接是可信的。
clusters:
- cluster:
certificate-authority: /path/to/ca.crt
server: https://kubernetes-api-server:6443
name: cluster-name2. 客户端证书 (Client Certificate)
kubeconfig 字段:client-certificate
X.509 文件:客户端证书文件,通常是 .crt 或 .pem 后缀。
用途:用于客户端身份验证。客户端证书包含客户端的公钥和身份信息,由 CA 签署,证明客户端的身份。
users:
- name: user-name
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key3. 客户端私钥 (Client Key)
kubeconfig 字段:client-key
X.509 文件:客户端私钥文件,通常是 .key 或 .pem 后缀。
用途:用于客户端的身份验证和加密操作。私钥与客户端证书配对使用,用于解密信息和生成数字签名。
users:
- name: user-name
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key4. 证书和密钥在 kubeconfig 文件中的示例
以下是一个完整的 kubeconfig 文件示例,展示了如何引用上述证书和密钥:
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: /path/to/ca.crt
server: https://kubernetes-api-server:6443
name: cluster-name
contexts:
- context:
cluster: cluster-name
namespace: default
user: user-name
name: context-name
current-context: context-name
users:
- name: user-name
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key生成和使用这些文件的示例
1. 生成 CA 证书
# 生成 CA 私钥
openssl genrsa -out ca.key 2048
# 生成 CA 证书
openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/C=US/ST=California/L=San Francisco/O=My CA/CN=myca.com"2. 生成客户端私钥和 CSR
# 生成客户端私钥
openssl genrsa -out client.key 2048
# 生成 CSR
openssl req -new -key client.key -out client.csr -subj "/C=US/ST=California/L=San Francisco/O=My Company/CN=myuser"3. 使用 CA 签署客户端证书
# 使用 CA 签署客户端证书
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365实际环境中不需要生成 CA 证书,步骤简化为如下步骤(下方案例将 developer 作为客户端用户):
# 生成用户(客户端)私钥
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 文件
创建一个 kubeconfig 文件,配置 kubectl 使用生成的客户端证书进行身份认证,使用户可以使用 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创建 Role 和 RoleBinding
为上方案例的 developer 开发人员创建一个 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验证
使用 kubeconfig 文件连接 Kubernetes 集群
将上述生成的证书和密钥路径填入 kubeconfig 文件后,可以使用 kubectl 命令连接到 Kubernetes 集群:
kubectl get pods --kubeconfig=/path/to/kubeconfig总结
在 kubeconfig 文件中,CA 证书、客户端证书和客户端私钥都是 X.509 格式的文件。CA 证书用于验证集群的身份,客户端证书和私钥用于客户端的身份验证。了解这些文件的用途和生成方法,可以帮助安全地配置和管理 Kubernetes 集群的访问权限。
Last updated