免責事項: これは英文の記事「How to Configure Kubernetes RBAC for VKS Cluster」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
本ガイドは、VKS公式ドキュメントを補完し、ロールベースアクセス制御(RBAC)を実装するための実践的な例を提供するものです。
VKSクラスター内のユーザーやグループに対して、権限を定義する際にご活用ください。
vSphere Kubernetes Service
本セクションでは、特定のロールに基づいてVKSクラスターへユーザーを追加するための設定例を示します。
以下のコマンドを実行する前に、管理者権限を持つユーザーで対象のVKSクラスターへ kubectl コンテキストを切り替えてください。
kubectl vsphere login --insecure-skip-tls-verify --server=${SUPERVISOR_VIP} --tanzu-kubernetes-cluster-namespace=${VSPHERE_NAMESPACE} --tanzu-kubernetes-cluster-name=${TARGET_VKS_CLUSTER} -u [email protected]# --------------------------------------------------------------------------
# 1. ClusterRole の作成
# --------------------------------------------------------------------------
CLUSTER_ROLE_NAME=cluster-view-no-secrets
cat > ${CLUSTER_ROLE_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ${CLUSTER_ROLE_NAME}
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "namespaces", "pods", "services", "events", "configmaps", "serviceaccounts"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps", "extensions", "batch", "storage.k8s.io", "networking.k8s.io", "rbac.authorization.k8s.io"]
resources: ["*"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f ${CLUSTER_ROLE_NAME}.yaml
# --------------------------------------------------------------------------
# 2. ClusterRoleBinding の作成
# --------------------------------------------------------------------------
[email protected]
BINDING_NAME=grant-cluster-view-no-secrets-test
cat > ${BINDING_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ${BINDING_NAME}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ${CLUSTER_ROLE_NAME}
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: sso:${VCENTER_USER}
EOF
kubectl apply -f ${BINDING_NAME}.yaml
# --------------------------------------------------------------------------
# 3. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i get secrets --as "sso:${VCENTER_USER}" # no
# --------------------------------------------------------------------------
# 1. RoleBinding の作成
# --------------------------------------------------------------------------
[email protected]
NAMESPACE=default
BINDING_NAME=edit-binding-${NAMESPACE}-test-developer
cat > ${BINDING_NAME}.yaml <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: ${BINDING_NAME}
namespace: ${NAMESPACE}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit # Using the built-in "edit" ClusterRole
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: "sso:${VCENTER_USER}"
EOF
kubectl apply -f ${BINDING_NAME}.yaml
# --------------------------------------------------------------------------
# 2. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods -n ${NAMESPACE} --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i create pods -n ${NAMESPACE} --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i get pods -n kube-system --as "sso:${VCENTER_USER}" # no
# --------------------------------------------------------------------------
# 1. ClusterRoleBinding の作成
# --------------------------------------------------------------------------
VCENTER_USER="[email protected]"
BINDING_NAME="grant-cluster-admin-test"
cat > ${BINDING_NAME}.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ${BINDING_NAME}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin # Using the built-in "cluster-admin" ClusterRole
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: "sso:${VCENTER_USER}"
EOF
kubectl apply -f ${BINDING_NAME}.yaml
# --------------------------------------------------------------------------
# 2. 確認
# --------------------------------------------------------------------------
kubectl auth can-i get pods -A --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i delete nodes --as "sso:${VCENTER_USER}" # yes
kubectl auth can-i edit secrets -A --as "sso:${VCENTER_USER}" # yes