Dev > CaaS > Kubernetes > TKG > vSphere
Jul 26, 2021
Jul 28, 2021
N/A Views
MD
warning
この記事は2年以上前に更新されたものです。情報が古くなっている可能性があります。

既存のTanzu Kubernetes Grid環境に Pinniped を有効する方法のメモ。

Pinnipedを導入することで、tanzu CLIさえ用意すればどこからでもTKGのクラスタにアクセスできるようになります。

TKG 1.3以降で新規作成する場合は、最初から設定しておくと良いですが、1.2以前からアップデートした場合はこの手順が必要です。
ドキュメントは こちら

TKG 1.3.1-patch1で検証しています。

目次

Management ClusterにPinnipedをインストール

Pinnipedは Kapp Controller のAppリソース経由でインストールされます。

事前のAppリソースを確認します。pinnipedがいません。

$ kubectl get app -n tkg-system
NAME                   DESCRIPTION           SINCE-DEPLOY   AGE
antrea                 Reconcile succeeded   2m2s           110d
metrics-server         Reconcile succeeded   2m37s          110d
tanzu-addons-manager   Reconcile succeeded   2m31s          111d
vsphere-cpi            Reconcile succeeded   2m41s          87d
vsphere-csi            Reconcile succeeded   2m36s          110d

pinnepdをインストールするためのYAMLをtanzu CLIで生成します。
ここでは認証にLDAPを使用します。

export IDENTITY_MANAGEMENT_TYPE=ldap
export LDAP_BIND_DN=cn=admin,dc=example,dc=com
export LDAP_BIND_PASSWORD=password
export LDAP_HOST=ldap.example.com:636
export LDAP_USER_SEARCH_BASE_DN=ou=people,dc=exmple,dc=com
export LDAP_USER_SEARCH_FILTER=
export LDAP_USER_SEARCH_USERNAME=cn
export LDAP_USER_SEARCH_ID_ATTRIBUTE=cn
export LDAP_USER_SEARCH_EMAIL_ATTRIBUTE=mail
export LDAP_USER_SEARCH_NAME_ATTRIBUTE=cn
export LDAP_GROUP_SEARCH_BASE_DN=ou=groups,dc=example,dc=com
export LDAP_GROUP_SEARCH_FILTER=
export LDAP_GROUP_SEARCH_USER_ATTRIBUTE=DN
export LDAP_GROUP_SEARCH_GROUP_ATTRIBUTE=uniqueMember
export LDAP_GROUP_SEARCH_NAME_ATTRIBUTE=cn
export LDAP_ROOT_CA_DATA_B64=

export CLUSTER_NAME=carrot
export NAMESPACE=tkg-system
export CLUSTER_PLAN=dev
export VSPHERE_CONTROL_PLANE_ENDPOINT=dummy
export _TKG_CLUSTER_FORCE_ROLE=management

export FILTER_BY_ADDON_TYPE=authentication/pinniped
tanzu cluster create ${CLUSTER_NAME} --dry-run

次のようなSecretが生成されます。

apiVersion: v1
kind: Secret
metadata:
  annotations:
    tkg.tanzu.vmware.com/addon-type: authentication/pinniped
  labels:
    clusterctl.cluster.x-k8s.io/move: ""
    tkg.tanzu.vmware.com/addon-name: pinniped
    tkg.tanzu.vmware.com/cluster-name: carrot
  name: carrot-pinniped-addon
  namespace: tkg-system
stringData:
  values.yaml: |
    #@data/values
    #@overlay/match-child-defaults missing_ok=True
    ---
    infrastructure_provider: vsphere
    tkg_cluster_role: management
    custom_cluster_issuer: ""
    custom_tls_secret: ""
    http_proxy: ""
    https_proxy: ""
    no_proxy: ""
    identity_management_type: ldap
    pinniped:
      cert_duration: 2160h
      cert_renew_before: 360h
      supervisor_svc_endpoint: https://0.0.0.0:31234
      supervisor_ca_bundle_data: ca_bundle_data_of_supervisor_svc
      supervisor_svc_external_ip: 0.0.0.0
      supervisor_svc_external_dns: null
      upstream_oidc_client_id: ""
      upstream_oidc_client_secret: ""
      upstream_oidc_issuer_url: https://0.0.0.0:30167
      upstream_oidc_tls_ca_data: ca_bundle_data_of_dex_svc
      upstream_oidc_additional_scopes:
      - email
      - profile
      - groups
      upstream_oidc_claims:
        username: name
        groups: groups
    dex:
      app: dex
      create_namespace: true
      namespace: tanzu-system-auth
      organization: vmware
      commonname: tkg-dex
      config:
        connector: ldap
        frontend:
          theme: tkg
        web:
          https: 0.0.0.0:5556
          tlsCert: /etc/dex/tls/tls.crt
          tlsKey: /etc/dex/tls/tls.key
        expiry:
          signingKeys: 90m
          idTokens: 5m
          authRequests: 90m
          deviceRequests: 5m
        logger:
          level: info
          format: json
        staticClients:
        - id: pinniped
          redirectURIs:
          - https://0.0.0.0/callback
          name: pinniped
          secret: dummyvalue
        ldap:
          host: ldap.example.com:636
          insecureNoSSL: false
          startTLS: null
          rootCA: null
          rootCAData: ""
          bindDN: cn=admin,dc=example,dc=com
          BIND_PW_ENV_VAR: password
          usernamePrompt: LDAP Username
          insecureSkipVerify: false
          userSearch:
            baseDN: ou=people,dc=exmple,dc=com
            filter: ""
            username: cn
            idAttr: cn
            emailAttr: mail
            nameAttr: cn
            scope: sub
          groupSearch:
            baseDN: ou=groups,dc=example,dc=com
            filter: ""
            nameAttr: cn
            scope: sub
            userMatchers:
            - userAttr: DN
              groupAttr: uniqueMember
        oauth2:
          skipApprovalScreen: true
          responseTypes:
          - code
        storage:
          type: kubernetes
          config:
            inCluster: true
        enablePasswordDB: false
      service:
        name: dexsvc
        type: null
      deployment:
        replicas: 1
      certificate:
        duration: 2160h
        renewBefore: 360h
      dns:
        vsphere:
          dnsNames:
          - tkg-dex.com
          ipAddresses:
          - 0.0.0.0
        aws:
          dnsNames:
          - tkg-dex.com
          DEX_SVC_LB_HOSTNAME: example.com
        azure:
          dnsNames:
          - tkg-dex.com
          DEX_SVC_LB_HOSTNAME: dex.example.com
type: tkg.tanzu.vmware.com/addon

問題がなければkubectl applyでManagement Clusterに対して適用します。

kubectl config use-context carrot-admin@carrot
tanzu cluster create ${CLUSTER_NAME} --dry-run | kubectl apply -f -

Appリソース一覧を再度確認するとpinnipedが表示され、Reconcile succeededと出力されれば正常にインストールされています。

$ kubectl get app -n tkg-system
NAME                   DESCRIPTION           SINCE-DEPLOY   AGE
antrea                 Reconcile succeeded   37s            110d
metrics-server         Reconcile succeeded   111s           110d
pinniped               Reconcile succeeded   103s           9m55s
tanzu-addons-manager   Reconcile succeeded   111s           111d
vsphere-cpi            Reconcile succeeded   116s           87d
vsphere-csi            Reconcile succeeded   105s           110d

次のコマンドでKapp Controllerによって実際にデプロイされたリソースを確認できます。

 $ kubectl get app -n tkg-system pinniped -o template='{{.status.inspect.stdout}}'
Target cluster 'https://100.64.0.1:443' (nodes: carrot-control-plane-kbfpl, 1+)
01:49:39AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"antreaclusternetworkpolicystats"}
01:49:39AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"antreanetworkpolicystats"}
01:49:39AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"networkpolicystats"}
Resources in app 'pinniped-ctrl'
Namespace            Name                                                          Kind                      Owner    Conds.  Rs  Ri         Age
(cluster)            cluster-info-reader                                           ClusterRole               kapp     -       ok  -          8m
^                    cluster-info-reader                                           ClusterRoleBinding        kapp     -       ok  -          8m
^                    credentialissuers.config.concierge.pinniped.dev               CustomResourceDefinition  kapp     2/2 t   ok  -          8m
^                    dex                                                           ClusterRole               kapp     -       ok  -          238d
^                    dex                                                           ClusterRoleBinding        kapp     -       ok  -          238d
^                    federationdomains.config.supervisor.pinniped.dev              CustomResourceDefinition  kapp     2/2 t   ok  -          8m
^                    jwtauthenticators.authentication.concierge.pinniped.dev       CustomResourceDefinition  kapp     2/2 t   ok  -          8m
^                    oidcidentityproviders.idp.supervisor.pinniped.dev             CustomResourceDefinition  kapp     2/2 t   ok  -          8m
^                    pinniped-concierge                                            ClusterRoleBinding        kapp     -       ok  -          8m
^                    pinniped-concierge                                            Namespace                 kapp     -       ok  -          8m
^                    pinniped-concierge-aggregated-api-server                      ClusterRole               kapp     -       ok  -          8m
^                    pinniped-concierge-aggregated-api-server                      ClusterRoleBinding        kapp     -       ok  -          8m
^                    pinniped-concierge-create-token-credential-requests           ClusterRole               kapp     -       ok  -          8m
^                    pinniped-concierge-create-token-credential-requests           ClusterRoleBinding        kapp     -       ok  -          8m
^                    pinniped-supervisor                                           Namespace                 kapp     -       ok  -          8m
^                    tanzu-system-auth                                             Namespace                 kapp     -       ok  -          8m
^                    tkg-pinniped-post-deploy-cluster-role                         ClusterRole               kapp     -       ok  -          8m
^                    tkg-pinniped-post-deploy-cluster-role-binding                 ClusterRoleBinding        kapp     -       ok  -          8m
^                    v1alpha1.login.concierge.pinniped.dev                         APIService                kapp     1/1 t   ok  -          8m
^                    webhookauthenticators.authentication.concierge.pinniped.dev   CustomResourceDefinition  kapp     2/2 t   ok  -          8m
kube-public          pinniped-concierge-cluster-info-lister-watcher                Role                      kapp     -       ok  -          8m
^                    pinniped-concierge-cluster-info-lister-watcher                RoleBinding               kapp     -       ok  -          8m
^                    pinniped:view-pinnipedinfo                                    Role                      kapp     -       ok  -          8m
^                    pinniped:view-pinnipedinfo                                    RoleBinding               kapp     -       ok  -          8m
kube-system          pinniped-concierge-extension-apiserver-authentication-reader  RoleBinding               kapp     -       ok  -          8m
^                    pinniped-concierge-kube-system-pod-read                       Role                      kapp     -       ok  -          8m
^                    pinniped-concierge-kube-system-pod-read                       RoleBinding               kapp     -       ok  -          8m
pinniped-concierge   pinniped-concierge                                            Deployment                kapp     2/2 t   ok  -          8m
^                    pinniped-concierge                                            ServiceAccount            kapp     -       ok  -          8m
^                    pinniped-concierge-76576668d5                                 ReplicaSet                cluster  -       ok  -          8m
^                    pinniped-concierge-76576668d5-fbf2d                           Pod                       cluster  4/4 t   ok  -          8m
^                    pinniped-concierge-76576668d5-x7fsl                           Pod                       cluster  4/4 t   ok  -          8m
^                    pinniped-concierge-aggregated-api-server                      Role                      kapp     -       ok  -          8m
^                    pinniped-concierge-aggregated-api-server                      RoleBinding               kapp     -       ok  -          8m
^                    pinniped-concierge-api                                        Endpoints                 cluster  -       ok  -          8m
^                    pinniped-concierge-api                                        Service                   kapp     -       ok  -          8m
^                    pinniped-concierge-api-qzbjq                                  EndpointSlice             cluster  -       ok  -          8m
^                    pinniped-concierge-config                                     ConfigMap                 kapp     -       ok  -          8m
^                    tkg-jwt-authenticator                                         JWTAuthenticator          kapp     -       ok  -          8m
pinniped-supervisor  pinniped-ca                                                   Certificate               kapp     1/1 t   ok  -          8m
^                    pinniped-ca-2scpf                                             CertificateRequest        cluster  1/1 t   ok  -          8m
^                    pinniped-ca-issuer                                            Issuer                    kapp     1/1 t   ok  -          8m
^                    pinniped-cert                                                 Certificate               kapp     1/1 t   ok  -          8m
^                    pinniped-cert-7c8sk                                           CertificateRequest        cluster  1/1 t   ok  -          6m
^                    pinniped-cert-tsbq5                                           CertificateRequest        cluster  1/1 t   ok  -          7m
^                    pinniped-federation-domain                                    FederationDomain          kapp     -       ok  -          8m
^                    pinniped-post-deploy-job                                      Job                       kapp     1/1 t   ok  Completed  8m
^                    pinniped-post-deploy-job-sa                                   ServiceAccount            kapp     -       ok  -          8m
^                    pinniped-post-deploy-job-zhmzl                                Pod                       cluster  2/4 t   ok  -          7m
^                    pinniped-selfsigned-ca-issuer                                 Issuer                    kapp     1/1 t   ok  -          8m
^                    pinniped-supervisor                                           Deployment                kapp     2/2 t   ok  -          8m
^                    pinniped-supervisor                                           Endpoints                 cluster  -       ok  -          8m
^                    pinniped-supervisor                                           Role                      kapp     -       ok  -          8m
^                    pinniped-supervisor                                           RoleBinding               kapp     -       ok  -          8m
^                    pinniped-supervisor                                           Service                   kapp     -       ok  -          8m
^                    pinniped-supervisor                                           ServiceAccount            kapp     -       ok  -          8m
^                    pinniped-supervisor-654b669974                                ReplicaSet                cluster  -       ok  -          8m
^                    pinniped-supervisor-654b669974-cnqj9                          Pod                       cluster  4/4 t   ok  -          5m
^                    pinniped-supervisor-654b669974-qzh28                          Pod                       cluster  4/4 t   ok  -          5m
^                    pinniped-supervisor-kxv79                                     EndpointSlice             cluster  -       ok  -          8m
^                    pinniped-supervisor-static-config                             ConfigMap                 kapp     -       ok  -          8m
^                    upstream-idp-client-credentials                               Secret                    kapp     -       ok  -          8m
^                    upstream-oidc-identity-provider                               OIDCIdentityProvider      kapp     2/2 t   ok  -          5m
tanzu-system-auth    dex                                                           ConfigMap                 kapp     -       ok  -          8m
^                    dex                                                           Deployment                kapp     2/2 t   ok  -          8m
^                    dex                                                           ServiceAccount            kapp     -       ok  -          8m
^                    dex-77cfc7fd87                                                ReplicaSet                cluster  -       ok  -          8m
^                    dex-77cfc7fd87-7n7rt                                          Pod                       cluster  4/4 t   ok  -          5m
^                    dex-ca                                                        Certificate               kapp     1/1 t   ok  -          8m
^                    dex-ca-issuer                                                 Issuer                    kapp     1/1 t   ok  -          8m
^                    dex-ca-q7czk                                                  CertificateRequest        cluster  1/1 t   ok  -          8m
^                    dex-cert                                                      Certificate               kapp     1/1 t   ok  -          8m
^                    dex-cert-fzpsk                                                CertificateRequest        cluster  1/1 t   ok  -          8m
^                    dex-cert-vf2pd                                                CertificateRequest        cluster  1/1 t   ok  -          5m
^                    dex-selfsigned-ca-issuer                                      Issuer                    kapp     1/1 t   ok  -          8m
^                    dexsvc                                                        Endpoints                 cluster  -       ok  -          8m
^                    dexsvc                                                        Service                   kapp     -       ok  -          8m
^                    dexsvc-s6dgm                                                  EndpointSlice             cluster  -       ok  -          8m
^                    ldap-bindpw                                                   Secret                    kapp     -       ok  -          8m
tkg-system           pinniped-kapp-config                                          ConfigMap                 kapp     -       ok  -          8m
Rs: Reconcile state
Ri: Reconcile information
80 resources
Succeeded

Pinnepedにアクセスします。JWTAuthenticatorリソースをみてURLを確認します。

$ kubectl get jwtauthenticator -n pinniped-concierge 
NAME                    ISSUER
tkg-jwt-authenticator   https://192.168.11.110:31234

ISSUERのURLにアクセスします。この例では https://192.168.11.110:31234 です。

image

LDAP認証を使う場合は、OIDCのProxyとしてDexがインストールされます。Dexにもアクセスします。
OIDCIdentityProviderリソースをみてURLを確認します。

$ kubectl get oidcidentityprovider -n pinniped-supervisor
NAME                              ISSUER                         STATUS   AGE
upstream-oidc-identity-provider   https://192.168.11.110:30167   Ready    10m

ISSUERのURLにアクセスします。この例では https://192.168.11.110:30167/auth です。

image

image

Workload ClusterにPinnipedをインストール

次にWorkload ClusterにPinnipedをインストールします。Workload ClusterのAppリソース一覧を取得し、pinnipedが存在しないことを確認します。

$ kubectl config use-context orange-admin@orange
$ kubectl get app -n tkg-system  
NAME             DESCRIPTION           SINCE-DEPLOY   AGE
antrea           Reconcile succeeded   4m34s          110d
metrics-server   Reconcile succeeded   3m36s          110d
vsphere-cpi      Reconcile succeeded   2m32s          102d
vsphere-csi      Reconcile succeeded   3m34s          110d

pinnepdをインストールするためのYAMLをtanzu CLIで生成します。contextは再度management clusterに戻します。

kubectl config use-context carrot-admin@carrot

export SUPERVISOR_ISSUER_URL=$(kubectl get configmap pinniped-info -n kube-public -otemplate='{{.data.issuer}}')
export SUPERVISOR_ISSUER_CA_BUNDLE_DATA_B64=$(kubectl get configmap pinniped-info -n kube-public -otemplate='{{.data.issuer_ca_bundle_data}}')
export CLUSTER_NAME=orange
export NAMESPACE=default
export CLUSTER_PLAN=dev
export VSPHERE_CONTROL_PLANE_ENDPOINT=dummy
export _TKG_CLUSTER_FORCE_ROLE=workload

export FILTER_BY_ADDON_TYPE=authentication/pinniped
tanzu cluster create ${CLUSTER_NAME} --dry-run

次のようなSecretが生成されます。

apiVersion: v1
kind: Secret
metadata:
  annotations:
    tkg.tanzu.vmware.com/addon-type: authentication/pinniped
  labels:
    clusterctl.cluster.x-k8s.io/move: ""
    tkg.tanzu.vmware.com/addon-name: pinniped
    tkg.tanzu.vmware.com/cluster-name: orange
  name: orange-pinniped-addon
  namespace: default
stringData:
  values.yaml: |
    #@data/values
    #@overlay/match-child-defaults missing_ok=True
    ---
    infrastructure_provider: vsphere
    tkg_cluster_role: workload
    identity_management_type: oidc
    pinniped:
      cert_duration: 2160h
      cert_renew_before: 360h
      supervisor_svc_endpoint: https://192.168.11.110:31234
      supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURORENDQWh5Z0F3SUJBZ0lSQU9iYnNxUUUwWjlGOUtwSzlUTG9IS1l3RFFZSktvWklodmNOQVFFTEJRQXcKS0RFUE1BMEdBMVVFQ2hNR2RtMTNZWEpsTVJVd0V3WURWUVFERXd4MGEyY3RjR2x1Ym1sd1pXUXdIaGNOTWpFdwpOekUyTURFME1UUXdXaGNOTXpFd056RTBNREUwTVRRd1dqQW9NUTh3RFFZRFZRUUtFd1oyYlhkaGNtVXhGVEFUCkJnTlZCQU1UREhSclp5MXdhVzV1YVhCbFpEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0MKZ2dFQkFLMjVSQW9qSVB6VVFSb2k2eGJqNVZ4azFLTmhwakJHSnBlY0ZITFNCdy9NTG03c3d6b2pRSWhVWXhBNQpRRExpcGx5L29YVk5DanNBK2ROeEZLc0xTNHpIUjFMQjlSSFBqNkpwbFVOdDRVRlUxSnFSbXR2b3pWUU5lbUpWClJraVNISktTQjJBUUY3NG1FQjU5QmhkYitIMVNSS25RK01jMGNuenoxcWp3RFJLdmkzazJSZ3czSTUrRDFuRnEKalJ2bXA2c2ZOSHEyMHpWSlFNc2dHcmtUMGg5WjdLeDBYbno5cjBJMTBLVm5KNXhjUkp4WjBiWkhjWmdWQTRWRApheEdmOFk2YlJ5OWl6TEwvZm1ua1g4R0NtKzAvZEY0UXRKaWxyOFk5MVFtdXQ0aWx5SnFnZDRDYml6Tmk2RTlCClQrajd5OFJyV0tmMWFLRVkrRFNvdkdrSGI2c0NBd0VBQWFOWk1GY3dEZ1lEVlIwUEFRSC9CQVFEQWdJRU1CMEcKQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUJVRwpBMVVkRVFRT01BeUNDbkJwYm01cGNHVmtZMkV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUM4STY4UG9XSW4rCmt2Sk5wWkZTYjFwbmExYzA2K1NLZndMQlpQZFRjOG9KREZHOXN0WVBvRjJpelo4Y2R6dXhmUjhqMEJJUFpKM2MKb3VBNkRHRHhvMTRXZEdVQkhMTXhXN2VlRlFIVnNDMW93QlE3cWFhclpiS1N5dFA1T0UrOUt5UnB3Z3ZqbXVuVQp1bnY2a1Y1eUY0YXA4K2xmaElVRnR5Qlh1RkRDNkJMR1ZUUGNtWXRhajFJekU3YTc0VE5tSmJiRTRLNmorK24zClh1RUw1Z2ZkcE4vU3BtaG5oU04vWlo3WDRuWW1qZzBtTjVmTm84cDVpdFp4c1gwSmg1LytFNE5oeEZWSFlPRVAKa0V4TVJqSDh2c2RrM0twd1NEakIvRjRGREgxZG9JRkE1aVU5TGhva1N6bW1RL2JrbUZnM3FmSlVtQ24rR1BhaAoyazVyWHdQQ2N6TT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
      image:
        name: pinniped
        tag: v0.4.1_vmware.1
        repository: projects.registry.vmware.com/tkg
        pull_policy: IfNotPresent
      post_deploy_job_image:
        name: tanzu_core/addons/tkg-pinniped-post-deploy
        tag: v1.3.1
        repository: projects.registry.vmware.com/tkg
        pull_policy: IfNotPresent
type: tkg.tanzu.vmware.com/addon

問題がなければkubectl applyでManagement Clusterに対して適用します。

kubectl config use-context carrot-admin@carrot
tanzu cluster create ${CLUSTER_NAME} --dry-run | kubectl apply -f -

Workload ClusterのAppリソース一覧を再度確認するとpinnipedが表示され、Reconcile succeededと出力されれば正常にインストールされています。

$ kubectl config use-context orange-admin@orange
$ kubectl get app -n tkg-system
NAME             DESCRIPTION           SINCE-DEPLOY   AGE
antrea           Reconcile succeeded   3m51s          110d
metrics-server   Reconcile succeeded   2m52s          110d
pinniped         Reconcile succeeded   2m46s          2m50s
vsphere-cpi      Reconcile succeeded   111s           102d
vsphere-csi      Reconcile succeeded   2m59s          110d

次のコマンドでKapp Controllerによって実際にデプロイされたリソースを確認できます。

$ kubectl get app -n tkg-system pinniped -o template='{{.status.inspect.stdout}}'
Target cluster 'https://100.64.0.1:443' (nodes: orange-control-plane-l9kmz, 2+)
03:13:47AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"networkpolicystats"}
03:13:47AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"antreanetworkpolicystats"}
03:13:47AM: debug: Resources: Ignoring group version: schema.GroupVersionResource{Group:"stats.antrea.tanzu.vmware.com", Version:"v1alpha1", Resource:"antreaclusternetworkpolicystats"}
Resources in app 'pinniped-ctrl'
Namespace            Name                                                          Kind                      Owner    Conds.  Rs  Ri         Age
(cluster)            cluster-info-reader                                           ClusterRole               kapp     -       ok  -          38s
^                    cluster-info-reader                                           ClusterRoleBinding        kapp     -       ok  -          38s
^                    credentialissuers.config.concierge.pinniped.dev               CustomResourceDefinition  kapp     2/2 t   ok  -          38s
^                    jwtauthenticators.authentication.concierge.pinniped.dev       CustomResourceDefinition  kapp     2/2 t   ok  -          38s
^                    pinniped-concierge                                            ClusterRoleBinding        kapp     -       ok  -          38s
^                    pinniped-concierge                                            Namespace                 kapp     -       ok  -          38s
^                    pinniped-concierge-aggregated-api-server                      ClusterRole               kapp     -       ok  -          38s
^                    pinniped-concierge-aggregated-api-server                      ClusterRoleBinding        kapp     -       ok  -          38s
^                    pinniped-concierge-create-token-credential-requests           ClusterRole               kapp     -       ok  -          38s
^                    pinniped-concierge-create-token-credential-requests           ClusterRoleBinding        kapp     -       ok  -          38s
^                    pinniped-supervisor                                           Namespace                 kapp     -       ok  -          38s
^                    tkg-pinniped-post-deploy-cluster-role                         ClusterRole               kapp     -       ok  -          38s
^                    tkg-pinniped-post-deploy-cluster-role-binding                 ClusterRoleBinding        kapp     -       ok  -          38s
^                    v1alpha1.login.concierge.pinniped.dev                         APIService                kapp     1/1 t   ok  -          38s
^                    webhookauthenticators.authentication.concierge.pinniped.dev   CustomResourceDefinition  kapp     2/2 t   ok  -          38s
kube-public          pinniped-concierge-cluster-info-lister-watcher                Role                      kapp     -       ok  -          38s
^                    pinniped-concierge-cluster-info-lister-watcher                RoleBinding               kapp     -       ok  -          38s
^                    pinniped:view-pinnipedinfo                                    Role                      kapp     -       ok  -          38s
^                    pinniped:view-pinnipedinfo                                    RoleBinding               kapp     -       ok  -          38s
kube-system          pinniped-concierge-extension-apiserver-authentication-reader  RoleBinding               kapp     -       ok  -          38s
^                    pinniped-concierge-kube-system-pod-read                       Role                      kapp     -       ok  -          38s
^                    pinniped-concierge-kube-system-pod-read                       RoleBinding               kapp     -       ok  -          38s
pinniped-concierge   pinniped-concierge                                            Deployment                kapp     2/2 t   ok  -          37s
^                    pinniped-concierge                                            ServiceAccount            kapp     -       ok  -          38s
^                    pinniped-concierge-6f4564c7b4                                 ReplicaSet                cluster  -       ok  -          37s
^                    pinniped-concierge-6f4564c7b4-7z9tb                           Pod                       cluster  4/4 t   ok  -          37s
^                    pinniped-concierge-6f4564c7b4-nfgfg                           Pod                       cluster  4/4 t   ok  -          37s
^                    pinniped-concierge-aggregated-api-server                      Role                      kapp     -       ok  -          38s
^                    pinniped-concierge-aggregated-api-server                      RoleBinding               kapp     -       ok  -          38s
^                    pinniped-concierge-api                                        Endpoints                 cluster  -       ok  -          37s
^                    pinniped-concierge-api                                        Service                   kapp     -       ok  -          37s
^                    pinniped-concierge-api-lgdbt                                  EndpointSlice             cluster  -       ok  -          37s
^                    pinniped-concierge-config                                     ConfigMap                 kapp     -       ok  -          38s
^                    tkg-jwt-authenticator                                         JWTAuthenticator          kapp     -       ok  -          37s
pinniped-supervisor  pinniped-post-deploy-job                                      Job                       kapp     1/1 t   ok  Completed  37s
^                    pinniped-post-deploy-job-knwld                                Pod                       cluster  2/4 t   ok  -          37s
^                    pinniped-post-deploy-job-sa                                   ServiceAccount            kapp     -       ok  -          38s
tkg-system           pinniped-kapp-config                                          ConfigMap                 kapp     -       ok  -          38s
Rs: Reconcile state
Ri: Reconcile information
38 resources
Succeeded

Pinnipedを経由してkubeconfigを取得

Pinnipedを導入するメリットとして、adminではなくユーザーの権限でk8sクラスタにアクセスするためのkubeconfigを生成できます。
この操作は tanzu CLIがインストールされている任意の端末上で行えます。 ここがポイントです。

ドキュメントは こちら

次のコマンドでManagement Clusterへログインします。ここでは~/.tanzuディレクトリがない、別の端末上で作業します。

tanzu login --endpoint https://192.168.11.110:6443 --name carrot

ブラウザが立ち上がり、ログインフォームが表示されます。LDAP認証の場合は、Dexのログインフォームです。

image

LDAPのユーザー情報を入力してログインします。

image

ブラウザが使えない端末上でtanzu loginする場合は、次の設定を加えます。

export TANZU_CLI_PINNIPED_AUTH_LOGIN_SKIP_BROWSER=true
tanzu login --endpoint https://192.168.11.110:6443 --name carrot

ブラウザが立ち上がる代わりに次のメッセージが出力されます。

Please log in: https://192.168.11.110:31234/oauth2/authorize?access_type=offline&client_id=pinniped-cli&code_challenge=T3nvakm4MPVR1UrX8AOZhNI3f7I6ifJhl_nS4VGPWGI&code_challenge_method=S256&nonce=2aa1d63168e0ce01a66473bb1d9bc869&redirect_uri=http%3A%2F%2F127.0.0.1%3A39585%2Fcallback&response_type=code&scope=offline_access+openid+pinniped%3Arequest-audience&state=70c5f446968e10b211617d1bd0dc407a

このURLをコピーして、Pinniped/Dexにアクセスできるネットワーク上のブラウザが使える端末上のブラウザでアクセスします。

image

ログインすると、127.0.0.1に対するコールバックURLへリダイレクトされます。この端末上からはアクセスできないので、ブラウザのアドレスバーからURLをコピーします。

image

tanzu loginを実行した端末上の別のコンソールを開いて、コピーしたURLをcurlでアクセスします。"でURLを囲む必要があります。

$ curl "http://127.0.0.1:39585/callback?code=C_ucwRvqFVNO3ugESbYgVZRYMZFM0nLStyXgfYFjVC4.2JokdjJa096qIe4cj0OixHw1XaXiD16OiHHQq1_YhAs&scope=openid+offline_access+pinniped%3Arequest-audience&state=70c5f446968e10b211617d1bd0dc407a"
you have been logged in and may now close this tab

tanzu loginを実行したコンソールに次のメッセージが出力されればログイン成功です。

✔  successfully logged in to management cluster using the kubeconfig carrot

次のコマンドでWorkload Clusterに対するkubeconfigを生成し、ファイルに保存します。

tanzu cluster kubeconfig get orange --export-file ~/.kube/config-orange

Management Clusterへのkubeconfigは~/.kube-tkg/configに記述されていますが、 tanzu management-cluster kubeconfig get コマンドでも取得可能です。

このkubeconfigを使ってk8sクラスタにアクセスしてみます。

kubectl cluster-info --kubeconfig ~/.kube/config-orange

初回は再度ログインが求められるので、tanzu loginの場合と同じ手順でログインします。

k8sクラスタにRBACの設定をしていなければ、ログインに成功後に、次のようなログが出力されます。

Error from server (Forbidden): services is forbidden: User "making" cannot list resource "services" in API group "" in the namespace "kube-system"

LDAPのmakingユーザーにroleをbindしていないのでk8sのリソースにアクセスする権限がありません。

ここではこのユーザーを管理者とみなし、cluster-adminのClusterRoleをbindします。

Workload Clusterに対して、admin権限で次のコマンドでLDAPユーザー個別にbindするか、

kubectl create clusterrolebinding ldap-making --clusterrole cluster-admin --user making

次のコマンドでLDAPグループに対してbindします。ユーザーに対してbindすると、LDAPにユーザーが増えるためにRoleBindingを作成する必要があって面倒なので、グループに対してbindした方が良いです。

kubectl create clusterrolebinding ldap-administrators --clusterrole cluster-admin --group administrators

これでtanzu loginを実行した端末上でもWorkload Clusterへアクセスできるようになります。

$ kubectl cluster-info --kubeconfig ~/.kube/config-orange                                                  
Kubernetes control plane is running at https://192.168.11.114:6443
KubeDNS is running at https://192.168.11.114:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Pinnipedを導入することで、tanzu CLIさえ用意すればどこからでもTKGのクラスタにアクセスできるようになりました。
運用する上でとても便利な機能です。

Found a mistake? Update the entry.
Share this article: