• kubernetes集群编排(7)


    k8s认证授权

    pod绑定sa

    1. [root@k8s2 ~]# kubectl create sa admin //在当前 Kubernetes 集群中创建一个名为 "admin" 的新服务账户
    2. [root@k8s2 secret]# vim pod3.yaml
    3. apiVersion: v1
    4. kind: Pod
    5. metadata:
    6. name: mypod
    7. spec:
    8. serviceAccountName: admin
    9. containers:
    10. - name: nginx
    11. image: nginx

    认证

    1. [root@k8s2 secret]# cd /etc/kubernetes/pki/
    2. [root@k8s2 pki]# openssl genrsa -out test.key 2048
    3. [root@k8s2 pki]# openssl req -new -key test.key -out test.csr -subj "/CN=test"
    4. [root@k8s2 pki]# openssl x509 -req -in test.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out test.crt -days 365
    5. [root@k8s2 pki]# kubectl config set-credentials test --client-certificate=/etc/kubernetes/pki/test.crt --client-key=/etc/kubernetes/pki/test.key --embed-certs=true
    6. [root@k8s2 pki]# kubectl config set-context test@kubernetes --cluster=kubernetes --user=test

    1. [root@k8s2 pki]# kubectl config view
    2. apiVersion: v1
    3. clusters:
    4. - cluster:
    5. certificate-authority-data: DATA+OMITTED
    6. server: https://192.168.56.172:6443
    7. name: kubernetes
    8. contexts:
    9. - context:
    10. cluster: kubernetes
    11. user: kubernetes-admin
    12. name: kubernetes-admin@kubernetes
    13. - context:
    14. cluster: kubernetes
    15. user: test
    16. name: test@kubernetes
    17. current-context: kubernetes-admin@kubernetes
    18. kind: Config
    19. preferences: {}
    20. users:
    21. - name: kubernetes-admin
    22. user:
    23. client-certificate-data: REDACTED
    24. client-key-data: REDACTED
    25. - name: test
    26. user:
    27. client-certificate-data: REDACTED
    28. client-key-data: REDACTED

    切换用户

    1. [root@k8s2 pki]# kubectl config use-context test@kubernetes
    2. [root@k8s2 pki]# kubectl get pod

     

    默认用户没有任何权限,需要授权

     切回admin

    [root@k8s2 pki]# kubectl config use-context kubernetes-admin@kubernetes
    

     

    1. [root@k8s2 rbac]# vim roles.yaml
    2. kind: Role
    3. apiVersion: rbac.authorization.k8s.io/v1
    4. metadata:
    5. namespace: default
    6. name: myrole
    7. rules:
    8. - apiGroups: [""]
    9. resources: ["pods"]
    10. verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
    11. ---
    12. kind: RoleBinding
    13. apiVersion: rbac.authorization.k8s.io/v1
    14. metadata:
    15. name: test-read-pods
    16. namespace: default
    17. subjects:
    18. - kind: User
    19. name: test
    20. apiGroup: rbac.authorization.k8s.io
    21. roleRef:
    22. kind: Role
    23. name: myrole
    24. apiGroup: rbac.authorization.k8s.io

    1. [root@k8s2 rbac]# kubectl apply -f roles.yaml
    2. role.rbac.authorization.k8s.io/myrole created
    3. rolebinding.rbac.authorization.k8s.io/test-read-pods created
    4. [root@k8s2 rbac]# kubectl config use-context test@kubernetes
    5. Switched to context "test@kubernetes".
    6. [root@k8s2 rbac]# kubectl run demo --image nginx
    7. [root@k8s2 rbac]# kubectl get pod

    现在只能操作pod资源,其它不行

    切回admin

    [root@k8s2 rbac]# kubectl config use-context kubernetes-admin@kubernetes
    

    授权

    1. [root@k8s2 rbac]# vim roles.yaml
    2. kind: Role
    3. apiVersion: rbac.authorization.k8s.io/v1
    4. metadata:
    5. namespace: default
    6. name: myrole
    7. rules:
    8. - apiGroups: [""]
    9. resources: ["pods"]
    10. verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
    11. ---
    12. kind: RoleBinding
    13. apiVersion: rbac.authorization.k8s.io/v1
    14. metadata:
    15. name: test-read-pods
    16. namespace: default
    17. subjects:
    18. - kind: User
    19. name: test
    20. apiGroup: rbac.authorization.k8s.io
    21. roleRef:
    22. kind: Role
    23. name: myrole
    24. apiGroup: rbac.authorization.k8s.io
    25. ---
    26. kind: ClusterRole
    27. apiVersion: rbac.authorization.k8s.io/v1
    28. metadata:
    29. name: myclusterrole
    30. rules:
    31. - apiGroups: [""]
    32. resources: ["pods"]
    33. verbs: ["get", "watch", "list", "delete", "create", "update"]
    34. - apiGroups: ["extensions", "apps"]
    35. resources: ["deployments"]
    36. verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    37. ---
    38. apiVersion: rbac.authorization.k8s.io/v1
    39. kind: RoleBinding #RoleBinding必须指定namespace
    40. metadata:
    41. name: rolebind-myclusterrole
    42. namespace: default
    43. roleRef:
    44. apiGroup: rbac.authorization.k8s.io
    45. kind: ClusterRole
    46. name: myclusterrole
    47. subjects:
    48. - apiGroup: rbac.authorization.k8s.io
    49. kind: User
    50. name: test
    51. ---
    52. apiVersion: rbac.authorization.k8s.io/v1
    53. kind: ClusterRoleBinding #ClusterRoleBinding全局授权,无需指定namespace
    54. metadata:
    55. name: clusterrolebinding-myclusterrole
    56. roleRef:
    57. apiGroup: rbac.authorization.k8s.io
    58. kind: ClusterRole
    59. name: myclusterrole
    60. subjects:
    61. - apiGroup: rbac.authorization.k8s.io
    62. kind: User
    63. name: test

    1. [root@k8s2 rbac]# kubectl apply -f roles.yaml
    2. [root@k8s2 rbac]# kubectl config use-context test@kubernetes
    3. [root@k8s2 rbac]# kubectl get deployments.apps -A

    切回admin 回收

    1. [root@k8s2 rbac]# kubectl config use-context kubernetes-admin@kubernetes
    2. [root@k8s2 rbac]# kubectl delete -f roles.yaml
    3. [root@k8s2 rbac]# kubectl config delete-user test
    4. [root@k8s2 rbac]# kubectl config delete-context test@kubernetes

     

  • 相关阅读:
    Sentinel配置持久化到Nacos实现流控熔断
    Springboot操作Mongodb实现增删改查带分页的操作
    工程伦理--13.4 临平净水厂化解“邻避效应”的对策
    Linux学习笔记8 - 文件IO编程(二)
    项目部署教程
    观察者模式:包工头的救赎
    Python框架之UnitTest
    关于触控板失灵的问题
    基于stm32单片机语音识别控制小车机器人
    数据库系统概论习题册
  • 原文地址:https://blog.csdn.net/m0_64028800/article/details/134299944