k 8 sクラスタにおけるrbac権限管理


RBACを有効にするには、apiserverにパラメータ--authorization-mode=RBACを追加する必要があります.使用するkubeadmにインストールされているクラスタの場合、1.6バージョン以上のものはデフォルトでRBACをオンにします.$cat/etc/kubernetes/manifests/kube-apiserverをオンにするかどうかを確認します.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=192.168.1.243
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC

Kubernetesの基本的な特性は、すべてのリソースオブジェクトがCRUD(Create、Read、Update、Delete)操作(すなわち、我々がよく言う増加、削除、変更、調査操作)とrbac関連のリソースオブジェクトを実行することを許可することである.1、Rule:ルールは、異なるAPI Groupリソース上の操作のセット2、RoleとClusterRole:ロールとクラスタロールです.この2つのオブジェクトには、上のRules要素が含まれています.違いは、Roleで定義されたルールは、単一のネーミングスペース、すなわちnamespaceに関連付けられているものにのみ適用され、ClusterRoleはクラスタの範囲内であるため、定義されたルールはネーミングスペースの制約を受けません.3、Subject:テーマ、クラスタ内で操作を試みる対象に対応し、クラスタには3種類のテーマリソースが定義されている:User Account:外部独立サービスで管理されている.ユーザーの管理クラスタ内部には関連するリソースオブジェクトが一つもないので、ユーザーはクラスタ内部のAPIで管理グループを行うことができない:これは複数のアカウントを関連付けるためのものである.クラスタにはcluster-adminService Accountなどのデフォルトで作成されたグループがあります.Kubernetes APIで管理されているユーザーアカウントの一部は、クラスタ内で実行されるアプリケーションに適用され、namespaceに関連付けられています.APIを通じて権限認証4:RoleBindingとClusterRoleBindingを完了する必要があります.簡単に言えば、宣言されたSubjectと私たちのRoleをバインドするプロセス(ユーザーに操作の権限をバインドする)です.両者の違いも作用範囲の違いです.RoleBindingは現在のnamespaceの下のリソース操作権限にのみ影響します.ClusterRoleBindingはすべてのnamespaceに影響します.
User Accountを作成するには、kube-systemというネーミングスペース1にアクセスし、秘密鍵$openssl genrsa-out dongyaliを作成するしかありません.key 20482、作成証明書署名要求ファイルCNは作成するユーザ名を表し、Oは作成するグループpenssl req-new-key dongyaliを表す.key -out dongyali.csr-subj"/CN=dongyali/O=booster"3、最終的な証明書ファイルを生成し、証明書の有効期限を1000日に設定するにはca.crtとca.keyの2つのファイルを使用して証明書要求を承認する必要がある.もしkubeadmがインストールしたクラスタを使用している場合、この2つのファイルは/etc/kubernetes/pki/ディレクトリの下にある$openssl x 509-req-in dongyali.csr -CA/etc/kubernetes/pki/ca.crt -CAkey/etc/kubernetes/pki/ca.key -CAcreateserial -out dongyali.crt -days 1000$ lsdongyali.csr dongyali.key dongyali.crt 4、作成したばかりの証明書ファイルと秘密鍵ファイルを使用してクラスタにユーザdongyali$kubectl config set-credentials dongyali--client-certificate=dongyaliを作成する.crt --client-key=dongyali.key 5、ユーザーのためにコンテキストを作成し、kube-system空間内に$kubectl config set-context dongyali-context--cluster=kubernetes--namespace=kube-system--user=dongyali 6、ユーザーdongyaliのためにロールを作成し、ユーザーがDeployment、Pod、ReplicaSetsを操作できるロールを作成する
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dongyali-role
  namespace: kube-system
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["deployments", "replicasets", "pods"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]     #      ['*']

7、ロールバインドの作成、ユーザーdongyaliとロールのバインド
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dongyali-rolebinding
  namespace: kube-system
subjects:
- kind: User
  name: dongyali
  apiGroup: ""
roleRef:
  kind: Role
  name: dongyali-role
  apiGroup: ""

8、$kubectl get pods--context=dongyali-context$kubectl--context=dongyali-context get pods--namespace=defaultError from server(Forbidden):pods is forbidden:User"dongyali"cannot list pods in the namespace"default"
あるnamespaceにしかアクセスできないServiceAccount 1を作成し、ServiceAccountオブジェクト$kubectl create sa dongyali-sa-n kube-system 2を作成し、roleを作成する
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dongyali-sa-role
  namespace: kube-system
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

3、RoleBindingオブジェクトを作成する
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dongyali-sa-rolebinding
  namespace: kube-system
subjects:
- kind: ServiceAccount
  name: dongyali-sa
  namespace: kube-system
roleRef:
  kind: Role
  name: dongyali-sa-role
  apiGroup: rbac.authorization.k8s.io

すべてのnamespaceにアクセスできるServiceAccountを作成するには、ClusterRoleとClusterRoleBindingの2つのリソースオブジェクト1を使用して、ServiceAcountオブジェクトを新規作成する必要があります.
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dongyali-sa2
  namespace: kube-system

2、ClusterRoleBindingオブジェクトを作成既存のクラスタロールcluster-adminを使用して、新しい
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dongyali-sa2-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: dongyali-sa2
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io