1 つ以上の完全修飾ドメイン名 (FQDN) を使用して TKGS クラスタをプロビジョニングするには、この例を参照してください。

FQDN のサポート

v1beta1 API では、完全修飾ドメイン名 (FQDN) を使用して TKG クラスタをプロビジョニングできます。クラスタ v1beta1 API には、Kubernetes API サーバ用の TLS 証明書で生成される 1 つ以上の FQDN 文字列を含む、kubeAPIServerFQDNs という名前の変数が含まれています。

FQDN が構成されているクラスタに対して kubectl vsphere login コマンドを実行すると、認証サービスではリスト内の最初の FQDN エントリを選択し、クラスタ操作のために優先する選択肢として kubeconfig に追加します。リスト内の最初の FQDN が解決可能であることが前提となります。クラスタのログインに必要な変更はありません。

生成される Kubernetes API 証明書には、kubeAPIServerFQDNs 変数で指定したすべての FQDN が含まれます。システムでは、リスト内の最初の FQDN 以外の FQDN の使用を試行しません。また、FQDN の解決も試行しません。リストの別の FQDN を使用する場合は、生成された kubeconfig ファイルを手動で編集して目的の FQDN を追加できます。

FQDN の要件

FQDN の使用はオプションです。FQDN を使用しない場合、機能は変更されません。ここで説明する機能は、TKG ワークロード クラスタに固有のものです。スーパーバイザー で FQDN を使用するには、スーパーバイザー のドキュメントで該当するトピックを参照してください。

FQDN を使用して TKG クラスタをプロビジョニングするには、次の要件を満たす必要があります。
  • vSphere 8.0 U2 P03 以降の環境
  • スーパーバイザー が最新のパッチ リリースに更新されている
  • v1beta1 API クラスタのみがサポートされている(v1alpha3 API クラスタがサポートされていない)
  • 選択した FQDN を有効な IP アドレスに解決するように DNS が構成されている
重要: FQDN 機能を使用できるのは、v1beta1 API を使用して CAPI クラスタをプロビジョニングしている場合のみです。FQDN で v1alpha3 API を使用して TKC をプロビジョニングすることはできません。

FQDN の例

クラスタ v1beta1 API を使用して、FQDN を持つクラスタを作成します。

spec.topology.variables.kupeAPIServerFQDNs 値は FQDN の配列です。

リスト内の最初の FQDN(この例では demo.fqdn.com)がシステムによって選択されます。
#cluster-example-fqdn.yaml
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: tkg-cluster-fqdn
  namespace: tkg-ns
spec:
  clusterNetwork:
    services:
      cidrBlocks: ["198.52.100.0/12"]
    pods:
      cidrBlocks: ["192.101.2.0/16"]
    serviceDomain: "cluster.local"
  topology:
    class: tanzukubernetescluster
    version: v1.26.5+vmware.2-fips.1-tkg.1
    controlPlane:
      replicas: 3
    workers:
      machineDeployments:
        - class: node-pool
          name: node-pool-01
          replicas: 3
    variables:
      - name: vmClass
        value: guaranteed-medium
      - name: storageClass
        value: tkgs-storage-class
      - name: defaultStorageClass
        value: tkg-storage-class
      - name: kubeAPIServerFQDNs
        value:
          - demo.fqdn.com
          - explore.fqdn.com

FQDN の確認

変数リスト内の最初の FQDN が kubeconfig ファイルに含まれていること、および変数リスト内のすべての FQDN が Kubernetes API サーバ用の TLS 証明書に含まれていることを確認する場合は、次の手順を実行します。
  1. Kubectl を使用して TKG クラスタにログインします。
    kubectl vsphere login --server=SVCP IP or FQDN --vsphere-username USERNAME --tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace VSPHERE-NS
  2. kubeconfig ファイルの FQDN を表示します。
    cat ~/.kube/config
  3. リスト内の最初の FQDN 変数が kubeconfig に含まれていることを確認します。
    例:
    apiVersion: v1
    clusters:
    - cluster:
        insecure-skip-tls-verify: false
        server: https://10.199.155.77:6443
      name: 10.199.155.77
    - cluster:
        certificate-authority-data: LS0tLS1CRUdJTiBDRVJ...DQWRLZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXc
        ...
        CkdiL1pua09rOVVjT3BwSStCTE9ZZDR0RGd2eHo...QUp0SUUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        server: https://demo.fqdn.com:6443
      name: demo.fqdn.com
    
  4. vSphere Client を使用して、[ワークロード管理] > [名前空間] > [コンピューティング] > [Tanzu Kubernetes クラスタ] > [制御プレーンのアドレス] で TKGS クラスタの IP アドレスを取得します。
  5. IP アドレスと FQDN を使用して、ローカルの /etc/hosts ファイルに手動で DNS エントリを作成します。
    例:
    sudo vi /etc/hosts
    127.0.0.1 localhost
    127.0.1.1 ubuntu-client-vm
    10.199.155.77 demo.fqdn.com
    ...
  6. openssl s_client コマンドを使用して TLS 証明書を表示します。
    echo | openssl s_client -servername hostname -connect FQDN:PORT 2>/dev/null | openssl x509 -text

    FQDN は、kubeAPIServerFQDNs 変数リスト内の最初の FQDN です。

    例:
    echo | openssl s_client -servername hostname -connect demo.fqdn.com:6443 2>/dev/null | openssl x509 -text
  7. Subject Alternative Name フィールドには、すべての FQDN が含まれています。
    X509v3 Subject Alternative Name:
        DNS:demo.fqdn.com, DNS:explore.fqdn.com, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.def

    Kubernetes API サーバ用の TLS 証明書には kubeAPIServerFQDNs リスト内のすべての FQDN が含まれているため、リスト内の 2 番目(または 3 番目。以下も同様)の FQDN を使用するように kubeconfig ファイルを手動で更新できます。これにより、指定した FQDN が使用されます(解決可能であることが前提)。