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
以上。
