Nutanix Kubernetes Platform(NKP)v2.12 の LDAP ID Provider の設定を、kubectl で確認してみます。
今回の内容です。
- 今回の環境
- ID Provider の設定(Connector)
- NKP グループの設定(VirtualGroup)
- ロール割り当ての設定(VirtualGroupClusterRoleBinding)
- ロール割り当ての確認
ドキュメントでは、下記のあたりが参考になります。
- External LDAP Directory Configuration
https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Kubernetes-Platform-v2_12:top-external-ldap-directory-config-c.html
今回の環境
この環境は、下記のように ID Provider として LDAP 設定してあります。
kubectl では、NKP の Management Cluster に接続できるようにしてあります。
[gowatana@lab-nkp-01 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION nkpm01-md-0-g7fsx-h4r2t-hvd2c Ready <none> 4d13h v1.29.6 nkpm01-md-0-g7fsx-h4r2t-ll8zf Ready <none> 4d13h v1.29.6 nkpm01-qfxvt-9sq92 Ready control-plane 4d13h v1.29.6
ID Provider の設定(Connector)
ID Provider の設定は、Connector リソースのオブジェクトで設定されています。
Connector リソースは2種類ありますが、connectors.dex.coreos.com ではなく connectors.dex.mesosphere.io のほうです。
[gowatana@lab-nkp-01 ~]$ kubectl get connectors.dex.mesosphere.io -n kommander ldap-identity-provider-7dm8l -o yaml apiVersion: dex.mesosphere.io/v1alpha1 kind: Connector metadata: creationTimestamp: "2024-09-24T10:26:43Z" generateName: ldap-identity-provider- generation: 2 name: ldap-identity-provider-7dm8l namespace: kommander resourceVersion: "6735336" uid: eab7cc30-f538-4304-b013-3fa84acedae5 spec: displayName: nxad.go-lab.jp enabled: true ldap: bindDN: CN=Administrator,CN=Users,DC=nxad,DC=go-lab,DC=jp bindSecretRef: name: connector-ldap-bindsecret-5x9ck groupSearch: baseDN: OU=NKP,DC=nxad,DC=go-lab,DC=jp filter: (objectClass=group) nameAttr: cn scope: "" userMatchers: - groupAttr: member userAttr: dn host: lab-nxad-01.go-lab.jp:636 insecureNoSSL: false insecureSkipVerify: false rootCASecretRef: name: connector-ldap-rootcasecret-n9k94 startTLS: false userSearch: baseDN: OU=NKP,DC=nxad,DC=go-lab,DC=jp emailAttr: userPrincipalName emailSuffix: "" filter: "" idAttr: sAMAccountName nameAttr: "" scope: sub username: sAMAccountName type: ldap
Bind DN のパスワードは、connector-ldap-bindsecret-~ という Secret に格納されています。
[gowatana@lab-nkp-01 ~]$ kubectl get secrets -n kommander connector-ldap-bindsecret-5x9ck -o yaml apiVersion: v1 data: password: <パスワードの Base64 エンコーディング> kind: Secret metadata: creationTimestamp: "2024-09-24T10:26:43Z" generateName: connector-ldap-bindsecret- labels: kommanderType: connectorSecret name: connector-ldap-bindsecret-5x9ck namespace: kommander ownerReferences: - apiVersion: dex.mesosphere.io/v1alpha1 kind: Connector name: ldap-identity-provider-7dm8l uid: eab7cc30-f538-4304-b013-3fa84acedae5 resourceVersion: "6714083" uid: 3251bbe4-2f44-454d-8d41-9d658fe5eff8 type: Opaque
そして LDAPS で接続するための CA ルート証明書は、connector-ldap-rootcasecret-~ Secret に格納されています。
[gowatana@lab-nkp-01 ~]$ kubectl get secrets -n kommander connector-ldap-rootcasecret-n9k94 -o yaml apiVersion: v1 data: tls.crt: <CA ルート証明書の Base64 エンコーディング> kind: Secret metadata: creationTimestamp: "2024-09-24T10:26:43Z" generateName: connector-ldap-rootcasecret- labels: kommanderType: connectorSecret name: connector-ldap-rootcasecret-n9k94 namespace: kommander ownerReferences: - apiVersion: dex.mesosphere.io/v1alpha1 kind: Connector name: ldap-identity-provider-7dm8l uid: eab7cc30-f538-4304-b013-3fa84acedae5 resourceVersion: "6714084" uid: 6a253d0d-e0b3-4690-9c11-31e17af131a2 type: Opaque
NKP グループの設定(VirtualGroup)
AD グループに対応させて作成した NKP グループは、VirtualGroup リソースとして作成されています。
[gowatana@lab-nkp-01 ~]$ kubectl get virtualgroup nkp-admins-x7klm -o yaml apiVersion: kommander.mesosphere.io/v1beta1 kind: VirtualGroup metadata: annotations: kommander.mesosphere.io/display-name: NKP Admins creationTimestamp: "2024-09-24T10:31:19Z" generateName: nkp-admins- generation: 1 name: nkp-admins-x7klm resourceVersion: "6719953" uid: 4581f2da-135e-4563-978d-4c2d62b36a6e spec: subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: oidc:NKP-Admins
ロール割り当ての設定(VirtualGroupClusterRoleBinding)
ロールの割り当ては、VirtualGroupClusterRoleBinding で VirtualGroup と ClusterRole を紐づけています。ちなみに、VirtualGroup を削除する場合は、先に VirtualGroupClusterRoleBinding を削除します。
[gowatana@lab-nkp-01 ~]$ kubectl get virtualgroupclusterrolebindings.kommander.mesosphere.io clusterpolicy-4kxj9 -o yaml apiVersion: kommander.mesosphere.io/v1beta1 kind: VirtualGroupClusterRoleBinding metadata: creationTimestamp: "2024-09-24T10:32:29Z" generateName: clusterpolicy- generation: 1 name: clusterpolicy-4kxj9 resourceVersion: "6721391" uid: 2b46cc49-1349-4a4c-b0ba-c6ee44a6a50d spec: clusterRoleRef: name: kommander-cluster-federated-admin placement: clusterSelector: {} virtualGroupRef: name: nkp-admins-x7klm
結局のところ、ClusterRoleBinding で Group と ClusterRole を紐づけるようです。
[gowatana@lab-nkp-01 ~]$ kubectl get clusterrolebindings.rbac.authorization.k8s.io clusterpolicy-4kxj9 -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: creationTimestamp: "2024-09-24T10:32:29Z" labels: kubefed.io/managed: "true" name: clusterpolicy-4kxj9 resourceVersion: "6721395" uid: a21e4b8b-3869-4e83-adbc-4812189bf6b7 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kommander-cluster-federated-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: oidc:NKP-Admins
ClusterRole は、下記のようにルール設定されています。
[gowatana@lab-nkp-01 ~]$ kubectl get clusterrole kommander-cluster-federated-admin -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2024-09-20T12:29:26Z" labels: kubefed.io/managed: "true" name: kommander-cluster-federated-admin resourceVersion: "18260" uid: 249d3b97-8aad-4055-aa0e-0895ad079f73 rules: - apiGroups: - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*'
ロール割り当ての確認
RBAC のロール割り当てについては、下記のように確認できそうです。
[gowatana@lab-nkp-01 ~]$ kubectl auth can-i get pods --namespace kube-system --as vcf-admin --as-group oidc:NKP-Admins --as-group system:authenticated yes [gowatana@lab-nkp-01 ~]$ kubectl auth can-i get clusters --namespace default --as vcf-admin --as-group oidc:NKP-Admins --as-group system:authenticated yes
以上。