请参阅此示例,置备使用一个或多个完全限定域名 (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,请参阅 主管 文档中的相应主题。
- vSphere 8.0 U2 P03 及更高版本的环境
- 主管 更新到最新的修补程序版本
- 仅支持 v1beta1 API 集群;不支持 v1alpha3 API 集群
- 配置 DNS 以将所选 FQDN 解析为有效的 IP 地址
FQDN 示例
使用集群 v1beta1 API 创建具有 FQDN 的集群。
spec.topology.variables.kupeAPIServerFQDNs
值是一个 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 验证
kubeconfig
文件中,以及变量列表中的所有 FQDN 是否包含在 Kubernetes API 服务器的 TLS 证书中。
- 使用 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
- 查看
kubeconfig
文件中的 FQDN。cat ~/.kube/config
- 验证列表中的第一个 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
- 使用 vSphere Client,从 获取 TKGS 集群的 IP 地址。
- 在本地
/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 ...
- 使用
openssl s_client
命令查看 TLS 证书。echo | openssl s_client -servername hostname -connect FQDN:PORT 2>/dev/null | openssl x509 -text
其中,
FQDN
是kubeAPIServerFQDNs
变量列表中的第一个变量。例如:echo | openssl s_client -servername hostname -connect demo.fqdn.com:6443 2>/dev/null | openssl x509 -text
- 在
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 可解析)。