請參閱此範例,佈建使用一或多個完整網域名稱 (FQDN) 的 TKGS 叢集。

FQDN 支援

可以使用 v1beta1 API 佈建具有完整網域名稱 (FQDN) 的 TKG 叢集。叢集 v1beta1 API 包含名為 kubeAPIServerFQDNs 的變數,該變數至少包含一個將在 Kubernetes API 伺服器的 TLS 憑證中產生的 FQDN 字串。

當針對設定了 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 叢集
  • 設定 DNS,以將所選 FQDN 解析為有效的 IP 位址
重要: 僅當使用 v1beta1 API 佈建 CAPI 叢集時,FQDN 功能才可用。無法使用 v1alpha3 API 佈建具有 FQDN 的 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. 在本機 /etc/hosts 檔案中手動建立包含 IP 位址和 FQDN 的 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

    其中,FQDNkubeAPIServerFQDNs 變數清單中的第一個變數。

    例如:
    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,因此您可以手動更新 kubeconfig 檔案以使用清單中的第二個 (或第三個等)FQDN,且將起作用 (假定 FQDN 可解析)。