• kubernetes的多租户管理实践


    在日常管理kubernetes中,使用的方式无非就是使用命令行方式(kubectl)和图像化方式(dashboard)。kubernetes官方提供的dashboard可以让kubernete管理员、公司开放人员和运维人员使用图形化的方式操作集群、查看日志、执行容器命令或增删改查资源等,当然也有其他图形化的管理方式,kubeboard就是一款不错的开源工具。

    从实际使用实践来看,并不希望每个用户都有管理员的权限,也不希望A项目组的人员去访问B项目组的资源,这时我们可以使用kubernetes的权限管理RBAC进行访问控制。

    具体的实现思路是:根据项目名称创建namespace,并创建同名的serviceaccount,并创建合适权限的Role,ClusterRole和RoleBinding、ClusterRoleBingding,然后对serviceaccount进行授权,那么对应人员就有了相关的管理权限。

    具体的实现方式示例

    1.创建测试命名空间

    kubectl create ns kube-rbac-test
    

    2.创建ServiceAccount

    kubectl create sa rbac-teat -n kube-rbac-test
    

    3.创建集群角色

    3.1针对整个集群的view角色

    1. apiVersion: rbac.authorization.k8s.io/v1
    2. kind: ClusterRole
    3. metadata:
    4. name: dashboard-viewonly
    5. rules:
    6. - apiGroups:
    7. - ""
    8. resources:
    9. - configmaps
    10. - endpoints
    11. - persistentvolumeclaims
    12. - pods
    13. - replicationcontrollers
    14. - replicationcontrollers/scale
    15. - serviceaccounts
    16. - services
    17. - nodes
    18. - persistentvolumeclaims
    19. - persistentvolumes
    20. verbs:
    21. - get
    22. - list
    23. - watch
    24. - apiGroups:
    25. - ""
    26. resources:
    27. - bindings
    28. - events
    29. - limitranges
    30. - namespaces/status
    31. - pods/log
    32. - pods/status
    33. - replicationcontrollers/status
    34. - resourcequotas
    35. - resourcequotas/status
    36. verbs:
    37. - get
    38. - list
    39. - watch
    40. - apiGroups:
    41. - ""
    42. resources:
    43. - namespaces
    44. verbs:
    45. - get
    46. - list
    47. - watch
    48. - apiGroups:
    49. - apps
    50. resources:
    51. - daemonsets
    52. - deployments
    53. - deployments/scale
    54. - replicasets
    55. - replicasets/scale
    56. - statefulsets
    57. verbs:
    58. - get
    59. - list
    60. - watch
    61. - apiGroups:
    62. - autoscaling
    63. resources:
    64. - horizontalpodautoscalers
    65. verbs:
    66. - get
    67. - list
    68. - watch
    69. - apiGroups:
    70. - batch
    71. resources:
    72. - cronjobs
    73. - jobs
    74. verbs:
    75. - get
    76. - list
    77. - watch
    78. - apiGroups:
    79. - extensions
    80. resources:
    81. - daemonsets
    82. - deployments
    83. - deployments/scale
    84. - ingresses
    85. - networkpolicies
    86. - replicasets
    87. - replicasets/scale
    88. - replicationcontrollers/scale
    89. verbs:
    90. - get
    91. - list
    92. - watch
    93. - apiGroups:
    94. - policy
    95. resources:
    96. - poddisruptionbudgets
    97. verbs:
    98. - get
    99. - list
    100. - watch
    101. - apiGroups:
    102. - networking.k8s.io
    103. resources:
    104. - networkpolicies
    105. verbs:
    106. - get
    107. - list
    108. - watch
    109. - apiGroups:
    110. - storage.k8s.io
    111. resources:
    112. - storageclasses
    113. - volumeattachments
    114. verbs:
    115. - get
    116. - list
    117. - watch
    118. - apiGroups:
    119. - rbac.authorization.k8s.io
    120. resources:
    121. - clusterrolebindings
    122. - clusterroles
    123. - roles
    124. - rolebindings
    125. verbs:
    126. - get
    127. - list
    128. - watch

    3.2 pod日志查看和执行命令的权限

    1. apiVersion: rbac.authorization.k8s.io/v1
    2. kind: ClusterRole
    3. metadata:
    4. name: pod-log-exec
    5. rules:
    6. - apiGroups:
    7. - ""
    8. resources:
    9. - pods
    10. - pods/log
    11. verbs:
    12. - get
    13. - list
    14. - apiGroups:
    15. - ""
    16. resources:
    17. - pods/exec
    18. verbs:
    19. - create

    3.3 全局namespaces的只读权限

    1. apiVersion: rbac.authorization.k8s.io/v1
    2. kind: ClusterRole
    3. metadata:
    4. name: namespace-readonly
    5. rules:
    6. - apiGroups:
    7. - ""
    8. resources:
    9. - namespaces
    10. verbs:
    11. - get
    12. - list
    13. - watch
    14. - apiGroups:
    15. - metrics.k8s.io
    16. resources:
    17. - podss
    18. verbs:
    19. - get
    20. - list
    21. - watch

    4.授权

    4.1使用ClusterRoleBinding将查看namespaces列表的权限授权给kube-rbac-test命名空间下所有的serviceaccount,这个此命名空间下所有的sa账户都有查看的权限

    kubectl create clusterrolebinding namespace-readonly --clusterrole=namespace-readonly --serviceaccount=system:serviceaccounts:kube-rbac-test

    4.2使用RoleBinding将相关权限赋权给对应的用户

    kubectl create rolebinding sa-test-rbac --clusterrole=pod-log-exec --serviceaccount=kube-rbac-test:rbac-teat -n kube-rbac-test

    5.使用token登录

    1. kubectl describe serviceaccount rbac-teat -n kube-rbac-test
    2. kubectl -n kube-rbac-test describe $(kubectl -n kube-rbac-test get secret -n kube-system -o name | grep namespace) | grep token

    6.根据token创建kubeconfig

    1. kubectl config set-cluster kubernetes-dashboard-viewonly \
    2. --certificate-authority=ca.pem \
    3. --embed-certs=true \
    4. --server=https://10.10.20.60:6443 \
    5. --kubeconfig=dashboard-viewonly-kubeconfig
    6. 2.配置用户token信息
    7. kubectl config set-credentials kubernetes-dashboard-viewonly --token=$token --kubeconfig=dashboard-viewonly-kubeconfig
    8. 3.配置上下文信息
    9. kubectl config set-context kubernetes-dashboard-viewonly \
    10. --cluster=kubernetes-dashboard-viewonly \
    11. --user=kubernetes-dashboard-viewonly \
    12. --kubeconfig=dashboard-viewonly-kubeconfig
    13. 4.设置默认上下文
    14. kubectl config use-context kubernetes-dashboard-viewonly --kubeconfig=dashboard-viewonly-kubeconfig

  • 相关阅读:
    认识一下什么是JSP
    大数据_数据中台建设的成熟度评估模型
    水果店圈子:做水果店有多赚钱,开个小型水果店一年收入能赚多少钱
    Friend.tech(FT):社交媒体金融的未来,真的如此美好吗?
    java面试之基础问题
    米尔MYD-JX8MPQ yocto
    IMX6ULL移植篇-Linux内核源码文件表
    斐波那契散列和hashMap实践
    协众信息想成为高薪UI设计师,必须要会这些!
    minio分布式文件存储
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/126761214