k 8 sクラスタにおけるrbac権限管理
RBACを有効にするには、apiserverにパラメータ--authorization-mode=RBACを追加する必要があります.使用するkubeadmにインストールされているクラスタの場合、1.6バージョン以上のものはデフォルトでRBACをオンにします.$cat/etc/kubernetes/manifests/kube-apiserverをオンにするかどうかを確認します.yaml
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を操作できるロールを作成する
7、ロールバインドの作成、ユーザーdongyaliとロールのバインド
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を作成する
3、RoleBindingオブジェクトを作成する
すべてのnamespaceにアクセスできるServiceAccountを作成するには、ClusterRoleとClusterRoleBindingの2つのリソースオブジェクト1を使用して、ServiceAcountオブジェクトを新規作成する必要があります.
2、ClusterRoleBindingオブジェクトを作成既存のクラスタロールcluster-adminを使用して、新しい
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