Kubernetes认证.md 4.7 KB


notion-id: 2e06699f-6930-49cd-99bb-02ae028dc6

![[Kubernetes认证 synced block]]


[!note] 🔑 注意分配认证权限

用户创建(示例:使用TLS证书和私钥对):


apiVersion: v1
kind: Secret
metadata:
  name: my-user-credentials
  namespace: my-namespace
type: Opaque
data:
  tls.crt: <Base64 encoded TLS certificate>
  tls.key: <Base64 encoded TLS private key>


角色创建(示例):


apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-role                    #角色的名称
  namespace: my-namespace
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]


角色绑定(示例:将角色绑定到Service Account):


apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-rolebinding
  namespace: my-namespace
subjects:
- kind: ServiceAccount           #user
  name: my-serviceaccount        #user-name
  namespace: my-namespace
roleRef:
  kind: Role
  name: my-role                  #绑定的角色名称
  apiGroup: rbac.authorization.k8s.io


在完成用户、角色和角色绑定的创建后,您可以使用以下步骤来生成对应的kubeconfig文件:

  1. 首先,确保您已经拥有管理员权限的kubeconfig文件,该文件通常是通过Kubernetes集群的配置工具(例如**kubeadm**)在初始化集群时自动生成的。这个管理员权限的kubeconfig文件通常位于**/etc/kubernetes/admin.conf**(如果使用**kubeadm**)或其他位置。
  2. 使用**kubectl config**命令生成新的kubeconfig文件。您需要将以下信息添加到新的kubeconfig文件中:
    • 集群信息(Cluster):指定集群的名称、API服务器地址和证书信息(如果使用TLS认证)。
    • 认证信息(User):根据创建用户的方式不同,添加相应的认证信息,包括客户端证书和私钥、用户名和密码等。
    • 上下文(Context):指定集群、用户和命名空间的组合。
    • 当前上下文(Current Context):指定默认使用的上下文。
  3. 将新的kubeconfig文件保存到合适的位置,例如用户的**$HOME/.kube/config**文件中。

    apiVersion: v1
    kind: Config
    clusters:
    # 集群配置部分
    - name: my-cluster
    cluster:
    # API服务器地址,需要根据实际集群配置填写
    server: https://api-server-address
    # Base64编码的CA证书数据,用于验证服务器的身份
    certificate-authority-data: <Base64 encoded CA certificate>
    users:
    # 用户配置部分
    - name: my-user
    user:
    # Base64编码的客户端证书数据,用于用户身份认证
    client-certificate-data: <Base64 encoded client certificate>
    # Base64编码的客户端私钥数据,用于用户身份认证
    client-key-data: <Base64 encoded client private key>
    contexts:
    # 上下文配置部分
    - name: my-context
    context:
    # 集群名称,引用上面定义的集群名称
    cluster: my-cluster
    # 用户名称,引用上面定义的用户名称
    user: my-user
    # 当前使用的上下文,引用上面定义的上下文名称
    current-context: my-context
    

将上述内容保存到一个新的文件中,例如**my-kubeconfig.yaml**,然后使用以下命令将新的kubeconfig文件复制到**$HOME/.kube/config**中:

kubectl config --kubeconfig=$HOME/.kube/config set-context --current --kubeconfig=my-kubeconfig.yaml

根据您的需求,可以根据这些示例文件来创建自己的YAML文件,并使用**kubectl apply -f <file>**命令将其应用到Kubernetes集群。通过这样的步骤,您可以实现在Kubernetes中进行用户认证和权限控制。请注意,生产环境中,需要仔细配置和审查权限,并遵循最佳实践来确保集群的安全性。

用户创建脚本文件

[[IMG-20260516155648917.sh]]

cat > mary-csr.json <<EOF
{
  "CN": "mary",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

#证书文件
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare mary 

#修改master主机IP
kubectl config set-cluster kubernetes \
  --certificate-authority=ca.pem \
  --embed-certs=true \
  --server=https://192.168.31.63:6443 \
  --kubeconfig=mary-kubeconfig
  
kubectl config set-credentials mary \
  --client-key=mary-key.pem \
  --client-certificate=mary.pem \
  --embed-certs=true \
  --kubeconfig=mary-kubeconfig

kubectl config set-context default \
  --cluster=kubernetes \
  --user=mary \
  --kubeconfig=mary-kubeconfig

#切换上下文
kubectl config use-context default --kubeconfig=mary-kubeconfig