NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Kubernetes Platform の LDAP 設定を kubectl で確認してみる。

Nutanix Kubernetes Platform(NKP)v2.12 の LDAP ID Provider の設定を、kubectl で確認してみます。

今回の内容です。

ドキュメントでは、下記のあたりが参考になります。

今回の環境

この環境は、下記のように 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

 

以上。

©2024 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。