1. # 创建用户授权文件目录
    2. cd /etc/kubernetes/pki
    3. mkdir -p users
    4. cd users/
    5. # 创建 openssl.cnf 配置文件
    6. vim openssl.cnf
    7. ------------------------
    8. [ req ]
    9. default_bits = 2048
    10. default_md = sha256
    11. distinguished_name = req_distinguished_name
    12. [req_distinguished_name]
    13. [ v3_ca ]
    14. basicConstraints = critical, CA:TRUE
    15. keyUsage = critical, digitalSignature, keyEncipherment, keyCertSign
    16. [ v3_req_server ]
    17. basicConstraints = CA:FALSE
    18. keyUsage = critical, digitalSignature, keyEncipherment
    19. extendedKeyUsage = serverAuth
    20. [ v3_req_client ]
    21. basicConstraints = CA:FALSE
    22. keyUsage = critical, digitalSignature, keyEncipherment
    23. extendedKeyUsage = clientAuth
    24. ------------------------
    25. # 使用 openssl 工具创建用户秘钥文件
    26. openssl genrsa -out ifcloud-viewer.key 2048
    27. # 使用 openssl 工具生成用户证书请求文件
    28. openssl req -new -key ifcloud-viewer.key -subj "/CN=ifcloud-viewer/O=CS" -out ifcloud-viewer.csr
    29. # 使用 openssl 工具生成用户证书
    30. openssl x509 -req -in ifcloud-viewer.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -extensions v3_req_client -extfile openssl.cnf -out ifcloud-viewer.crt -days 3650
    31. ==================================================
    32. # 设置集群参数变量,设置一个集群,需要指定根证书和 server-api 服务地址,指定 kubeconfig 文件
    33. export KUBE_APISERVER="https://lb.kubesphere.local:6443"
    34. kubectl config set-cluster k8s-ifcloud-viewer \
    35. --certificate-authority=/etc/kubernetes/pki/ca.crt \
    36. --server=https://lb.kubesphere.local:6443 \
    37. --embed-certs=true \
    38. --kubeconfig=ifcloud-viewer.kubeconfig
    39. # 设置客户端认证参数,设置一个证书用户 devuser,需要指定用户证书和秘钥,指定 kubeconfig 文件
    40. kubectl config set-credentials ifcloud-viewer \ # clustername(自定义必须和其他的保持一致)
    41. --client-certificate=ifcloud-viewer.crt \
    42. --client-key=ifcloud-viewer.key \
    43. --embed-certs=true \
    44. --kubeconfig=ifcloud-viewer.kubeconfig
    45. # 设置上下文参数,需要指定用户名,可以指定 NAMESPACE,指定 kubeconfig 文件
    46. kubectl config set-context k8s-ifcloud-viewer \ # clustername(自定义必须和其他的保持一致)
    47. --cluster=k8s-ifcloud-viewer \ # clustername(自定义必须和其他的保持一致)
    48. --user=ifcloud-viewer \ # 这里的用户必须要和openssl生成的用户证书CN保持一致
    49. --kubeconfig=ifcloud-viewer.kubeconfig
    50. # 设置上下文配置,指定 kubeconfig 文件
    51. kubectl config use-context k8s-ifcloud-viewer --kubeconfig=ifcloud-viewer.kubeconfig
    52. # 执行完毕,会在当前目录生成以 devuser 命令的 kubeconfig 配置文件
    53. ===================================================
    54. vim k8s_create_kubeconfig_ClusterRole_Clusterrolebanding.yaml
    55. ---
    56. apiVersion: v1
    57. kind: ServiceAccount
    58. metadata:
    59. name: ifcloud-viewer
    60. namespace: default
    61. ---
    62. apiVersion: rbac.authorization.k8s.io/v1
    63. kind: ClusterRole
    64. metadata:
    65. name: ifcloud-viewer
    66. rules:
    67. - apiGroups: [""]
    68. resources: ["services", "namespaces", "pods", "deployments", "nodes"]
    69. verbs: ["get", "watch", "list"]
    70. - apiGroups: ["tenant.kubesphere.io"]
    71. resources: ["workspaces"]
    72. verbs: ["get", "watch", "list"]
    73. - apiGroups: ["extensions"]
    74. resources: ["ingresses"]
    75. verbs: ["get", "watch", "list"]
    76. - apiGroups: ["networking.k8s.io"]
    77. resources: ["ingresses"]
    78. verbs: ["get", "watch", "list"]
    79. - apiGroups: ["gateway.kubesphere.io"]
    80. resources: ["gateways"]
    81. verbs: ["get", "watch", "list"]
    82. ---
    83. apiVersion: rbac.authorization.k8s.io/v1
    84. kind: ClusterRoleBinding
    85. metadata:
    86. name: ifcloud-viewer
    87. subjects:
    88. #- kind: ServiceAccount
    89. # name: ifcloud-viewer
    90. # namespace: default
    91. - kind: User
    92. name: ifcloud-viewer
    93. apiGroup: rbac.authorization.k8s.io
    94. roleRef:
    95. kind: ClusterRole
    96. name: ifcloud-viewer
    97. apiGroup: rbac.authorization.k8s.io
    98. =========================
    99. # 查看权限
    100. kubectl describe clusterrole ifcloud-viewer