RBAC细化集群的操作权限

创建serviceAccount

就是创建一个ServiceAccount资源对象,同步一个样例:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: hale
  namespace: default

创建之后,集群会自动给ServiceAccount绑一个secret,先记一下,后面有用。

$ kubectl get ServiceAccount hale -o jsonpath='{.secrets[0].name}' | xargs kubectl get secret -o yaml
apiVersion: v1
data:
  ca.crt: xxxxxxx
  namespace: ZGVmYXVsdA==
  token: xxxxxxx
kind: Secret
metadata:
  annotations:
    kubernetes.io/service-account.name: hale
    kubernetes.io/service-account.uid: 99fb73b9-c273-11e9-8275-129ae4c231d4
  creationTimestamp: 2019-08-19T11:22:17Z
  name: hale-token-5crhj
  namespace: default
  resourceVersion: "89912726"
  selfLink: /api/v1/namespaces/default/secrets/hale-token-5crhj
  uid: 99fee546-c273-11e9-8275-129ae4c231d4
type: kubernetes.io/service-account-token

配置RBAC授权

1 Role或者ClusterRole

用于配置具体的角色,一个角色代表了一组权限。根据生效的范围又分为Role(只在某个命名空间内有效)和ClusterRole(整个kubernetes集群范围内都有效)。比如授予对所有命名空间中的secret的读访问权限配置:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  # 鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

2 RoleBinding或者ClusterRoleBinding

用于将角色和ServiceAccount绑定。同样,根据生效的范围又分为RoleBinding 和ClusterRoleBinding,其中,RoleBinding可以引用在同一命名空间下的Role对象,也可以引用一个ClusterRole;而ClusterRoleBinding只能引用ClusterRole对象。比如将ServiceAccount对象hale,绑一个ClusterRole权限(secret-reader):

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: read-secret
  namespace: kube-system
subjects:
  - kind: ServiceAccount
    name: hale
    namespace: default
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

更多参考:https://kubernetes.io/docs/reference/access-authn-authz/rbac/

TKE开启公网访问或者内网访问

  1. 在 “基本信息” 中,单击 “集群凭证” 中的 【显示凭证】。
  2. 开启公网访问(需要配置来源网段)或者内网访问

客户端配置kubeconfig

# 配置user entry
kubectl config set-credentials <user> --token=bearer_token
# 配置cluster entry
kubectl config set-cluster <cluster> --server=https://cls-xxx.ccs.tencent-cloud.com --certificate-authority=ca.crt
# 配置context entry
kubectl config set-context <context> --cluster=<cluster> --user=<user>
# 查看
kubectl config view
# 配置当前使用的context
kubectl config use-context <context>

备注:

Bearer_token: 来自于创建serviceAccount中secret的token字段,并base64解码。

ca.crt:来自于创建serviceAccount中secret的ca.crt字段,并base64解码(保存为文件ca.crt)。或者从集群凭证中直接拷贝“集群CA证书”。

© roc all right reserved,powered by GitbookUpdated at 2019-12-14 03:07:53

results matching ""

    No results matching ""