本主题介绍如何为工作负载集群自定义节点网络连接,包括自定义节点 IP 地址以及配置 vSphere 上的 DHCP 预留、节点 IPAM 和 IPv6。
对于 vSphere 上的新集群,需要为其节点创建 DHCP 预留,并且可能还需要为其控制平面端点创建 DNS 记录:
集群节点的 DHCP 预留:
在多个控制平面节点可能会长时间关闭电源或脱机的环境中,作为安全预防措施,请调整新创建的集群控制平面节点和工作节点的 IP 地址的 DHCP 预留,以便这些地址保持静态且租约永不过期。
有关如何配置 DHCP 预留的说明,请参见 DHCP 服务器文档。
控制平面端点的 DNS 记录:
如果对控制平面端点使用 NSX Advanced Load Balancer 而不是 Kube-Vip,并将 VSPHERE_CONTROL_PLANE_ENDPOINT
设置为 FQDN 而不是数字 IP 地址,请按以下方式保留这些地址:
检索分配给集群 NSX ALB 的控制平面 IP 地址:
kubectl get cluster CLUSTER-NAME -o=jsonpath='{.spec.controlPlaneEndpoint} {"\n"}'
记录在输出中列为 "host"
的 IP 地址,例如 192.168.104.107
。
创建 DNS A
记录,该记录将您的 FQDN 与您记录的 IP 地址相关联。
要测试 FQDN,请创建一个新的 kubeconfig,该配置使用 FQDN,而不是来自 NSX ALB 的 IP 地址:
生成 kubeconfig:
tanzu cluster kubeconfig get CLUSTER-NAME --admin --export-file ./KUBECONFIG-TEST
编辑 kubeconfig 文件 KUBECONFIG-TEST
以将 IP 地址替换为 FQDN。例如,将以下地址:
server: https://192.168.104.107:443
替换为:
server: https://CONTROLPLANE-FQDN:443
使用修改后的 kubeconfig 检索集群的 Pod:
kubectl get pods -A --kubeconfig=./KUBECONFIG-TEST
如果输出列出 pod,则 DNS 适用于 FQDN。
您可以为独立管理集群中的节点及其部署的工作负载集群配置集群特定的 IP 地址块。如何执行此操作取决于运行集群的云基础架构:
在 vSphere 上,集群配置文件的 VSPHERE_NETWORK
设置 Tanzu Kubernetes Grid 用于集群节点和其他 Kubernetes 对象的虚拟机网络。IP 地址由在此虚拟机网络中运行的 DHCP 服务器分配给节点,该服务器与 Tanzu Kubernetes Grid 分开部署。
如果使用 NSX 网络连接,可以按照 VMware NSX-T Data Center 文档中的在分段上配置 DHCP 静态绑定为集群节点配置 DHCP 绑定。
注意对于 v4.0+,VMware NSX-T Data Center 被重命名为“VMware NSX”。
要在 Amazon Web Services (AWS) 上配置集群特定的 IP 地址块,请在集群配置文件中设置以下变量,如《配置文件变量参考》中的 AWS 表中所述。
AWS_PUBLIC_NODE_CIDR
,为公用节点设置 IP 地址范围。
AWS_PRIVATE_NODE_CIDR_1
或AWS_PRIVATE_NODE_CIDR_2
使其他范围可用AWS_PRIVATE_NODE_CIDR
,为专用节点设置 IP 地址范围。
AWS_PRIVATE_NODE_CIDR_1
和 AWS_PRIVATE_NODE_CIDR_2
使其他范围可用10.0.0.0/16
。要在 Azure 上配置集群特定的 IP 地址块,请在集群配置文件中设置以下变量,如《配置文件变量参考》中的 Microsoft Azure 表中所述。
AZURE_NODE_SUBNET_CIDR
,为工作节点 IP 地址创建具有 CIDR 块的新 VNet。AZURE_CONTROL_PLANE_SUBNET_CIDR
,为控制平面节点 IP 地址创建具有 CIDR 块的新 VNet。AZURE_NODE_SUBNET_NAME
,从现有 VNet 的范围分配工作节点 IP 地址。AZURE_CONTROL_PLANE_SUBNET_NAME
,从现有 VNet 的范围分配控制平面节点 IP 地址。通过节点 IPAM,集群内 IPAM 提供程序在集群创建和扩展期间分配和管理集群节点的 IP 地址,而无需配置外部 DHCP。
您可以为 vSphere 上的独立管理集群及其管理的基于类的工作负载集群配置节点 IPAM。以下过程为基于类的工作负载集群配置节点 IPAM;要为管理集群配置节点 IPAM,请参见vSphere 的管理集群配置中的配置节点 IPAM。
注意此过程不适用于具有 vSphere with Tanzu 主管或 AWS 或 Azure 上的独立管理集群的 TKG。
为新工作负载集群或现有工作负载集群配置节点 IPAM 时,用户指定 IPAM 提供程序从中分配静态 IP 地址的内部 IP 池以及网关地址。
将地址分配给集群节点时,节点 IPAM 始终选择池中可用的最低地址。
kubectl
和在本地安装的 Tanzu CLI节点 IPAM 在 TKG v2.4 中具有以下限制:
工作负载集群的节点 IPAM 池可以由两个不同的对象类型定义,具体取决于其地址如何与其他集群共享:
InClusterIPPool
配置仅可用于同一管理集群命名空间中的工作负载集群的 IP 池,例如 default
。
GlobalInClusterIPPool
为 IP 池配置地址,这些地址可分配给跨多个命名空间的工作负载集群。要使用节点 IPAM 配置新集群或现有集群,请执行以下操作:
创建一个 IP 池对象定义文件 my-ip-pool.yaml
,以从 TKG 可用于为工作负载集群分配静态 IP 地址的子网中设置 IP 地址范围。根据您想要的 IP 池范围,将对象定义为 InClusterIPPool
或 GlobalInClusterIPPool
例如:
InClusterIPPool
:要为命名空间 default
中的工作负载集群创建 IP 池 inclusterippool
,其中包含范围 10.10.10.2-10.10.10.100
加上 10.10.10.102
和 10.10.10.104
:
apiVersion: ipam.cluster.x-k8s.io/v1alpha2
kind: InClusterIPPool
metadata:
name: inclusterippool
namespace: default
spec:
gateway: 10.10.10.1
addresses:
- 10.10.10.2-10.10.10.100
- 10.10.10.102
- 10.10.10.104
prefix: 24
注意以前的 TKG 版本使用
valpha1
版本的InClusterIPPool
对象,该对象仅支持start
和end
指定的连续 IP 池范围,如 TKG v2.1 文档中所述。将集群升级到 v2.4 会将其 IP 池转换为新结构。
GlobalInClusterIPPool
:创建 IP 池 inclusterippool
以便在包含与上述 InClusterIPPool
相同的地址的命名空间之间共享:
apiVersion: ipam.cluster.x-k8s.io/v1alpha2
kind: GlobalInClusterIPPool
metadata:
name: inclusterippool
spec:
gateway: 10.10.10.1
addresses:
- 10.10.10.2-10.10.10.100
- 10.10.10.102
- 10.10.10.104
prefix: 24
创建 IP 池对象:
kubectl apply -f my-ip-pool.yaml
将工作负载集群配置为在平面集群配置文件或 Kubernetes 样式对象规范中使用 IP 池,如配置文件中所述。
例如:
平面配置文件(创建新集群):
# The name of the InClusterIPPool object specified above
NODE_IPAM_IP_POOL_NAME: inclusterippool
CONTROL_PLANE_NODE_NAMESERVERS: 10.10.10.10,10.10.10.11
WORKER_NODE_NAMESERVERS: 10.10.10.10,10.10.10.11
对象规范(创建新集群或修改现有集群):
---
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
spec:
topology:
variables:
- name: network
value:
addressesFromPools:
- apiGroup: ipam.cluster.x-k8s.io
kind: InClusterIPPool
name: inclusterippool
- name: controlplane
value:
network:
nameservers: [10.10.10.10,10.10.10.11]
- name: worker
value:
network:
nameservers: [10.10.10.10,10.10.10.11]
现在,您可以部署工作负载集群。
要查看集群节点是否已分配 IP 地址,请运行 kubectl get
以列出特定于 IaaS 的计算机对象(vspherevms
),并检查其 IPAddressClaimed
状态。True
表示节点的地址声明成功,如果状态为 False
,则命令输出会报告 Reason
,说明状况未就绪的原因:
kubectl -n CLUSTER-NAMESPACE get vspherevms
要查看 IP 地址声明,请列出 ipaddressclaims
。对于每台计算机,addressesFromPools
条目会导致创建一个 IPAddressClaim
:
kubectl -n CLUSTER-NAMESPACE get ipaddressclaims
要查看 IP 地址,请列出 ipaddress
。集群内 IPAM 提供程序应检测每个 IPAddressClaim
并创建相应的 IPAddress
对象:
kubectl -n CLUSTER-NAMESPACE get ipaddress
当给定虚拟机的所有声明都与 IP 地址匹配时,CAPV 会将分配的 IP 地址写入虚拟机的 cloud-init 元数据并创建虚拟机。要查看 IP 地址协调步骤,请参见 CAPV 和集群 API IPAM 提供程序 (CAIP) 日志:
kubectl logs -n capv-system capv-controller-manager
kubectl logs -n caip-in-cluster-system capi-in-cluster-controller-manager
您可以使用基于 Ubuntu 的节点,在具有 Kube-Vip 的 vSphere 上的仅 IPv6 但堆栈网络环境中运行管理集群和工作负载集群。
注意无法使用 vSphere with Tanzu 主管集群创建 IPv6 集群。无法向 Tanzu Mission Control 注册 IPv6 集群。当前不支持 NSX Advanced Load Balancer 服务和双堆栈 IPv4/IPv6 网络。
必备条件:
在引导计算机上执行以下操作以将管理集群部署到 IPv6 网络环境中:
将 Linux 配置为接受路由器通告,确保 Docker 服务启动时不会从路由表中移除默认 IPv6 路由。有关详细信息,请参见 Docker CE 删除 IPv6 默认路由。sudo sysctl net.ipv6.conf.eth0.accept_ra=2
为引导集群创建伪装规则以从引导集群发送出站流量:sudo ip6tables -t nat -A POSTROUTING -s fc00:f853:ccd:e793::/64 ! -o docker0 -j MASQUERADE
有关伪装规则的详细信息,请参见伪装。
在配置文件中为管理集群设置以下变量。
TKG_IP_FAMILY
设置为 ipv6
。VSPHERE_CONTROL_PLANE_ENDPOINT
设置为静态 IPv6 地址。CLUSTER_CIDR and SERVICE_CIDR
。默认值分别为 fd00:100:64::/48
和 fd00:100:96::/108
。通过运行 tanzu mc create
部署管理集群,如在配置文件中部署管理集群中所述。
如果已部署 IPv6 管理集群,请按以下方式部署 IPv6 工作负载集群:
在配置文件中为工作负载集群设置以下变量。
TKG_IP_FAMILY
设置为 ipv6
。VSPHERE_CONTROL_PLANE_ENDPOINT
设置为静态 IPv6 地址。CLUSTER_CIDR and SERVICE_CIDR
。默认值分别为 fd00:100:64::/48
和 fd00:100:96::/108
。按照创建工作负载集群中所述部署工作负载集群。
注意此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态。
通过双堆栈功能,可以部署具有 IPv4 和 IPv6 IP 系列的集群。但是,主 IP 系列是 IPv4。在试用此功能之前,请将 vCenter Server 配置为同时支持 IPv4 和 IPv6 连接。
以下是此版本中双堆栈功能的限制:
双堆栈功能支持将 vSphere 作为唯一的基础架构即服务 (IaaS) 产品。
无法在具有 Photon OS 节点的集群上配置双堆栈。仅支持配置了 ubuntu
的 OS_NAME
的集群。
无法为 vSphere with Tanzu 主管集群或其创建的工作负载集群配置双堆栈网络连接。
无法使用安装程序界面部署双堆栈管理集群。
您无法在 NSX Advanced Load Balancer (ALB) 提供的负载均衡器服务上使用双堆栈或 IPv6 服务。您可以使用 kube-vip 作为双堆栈集群的控制平面端点提供程序。使用 NSX ALB 作为双堆栈集群的控制平面端点提供程序尚未得到验证。
在此版本中,仅对 Antrea、Calico、CSI、CPI 和 Pinniped 等核心加载项组件进行了双堆栈支持验证。
要在集群上配置双堆栈,请执行以下操作:
设置双堆栈功能标记:
a. 要在管理集群上启用该功能,请运行以下命令:
tanzu config set features.management-cluster.dual-stack-ipv4-primary true
b. 要在工作负载集群上启用该功能,请运行以下命令:
tanzu config set features.cluster.dual-stack-ipv4-primary true
在集群配置文件中:
TKG_IP_FAMILY: ipv4,ipv6
。注意每个变量有两个 CIDR。这些 CIDR 的 IP 系列遵循配置的
TKG_IP_FAMILY
的顺序。允许用于 IPv4 地址的最大 CIDR 范围是 /12,最大的 IPv6 SERVICE_CIDR 范围为 /108。如果未设置 CIDR,则使用默认值。
如果使用 Antrea 作为集群的 CNI,请设置以下配置文件参数:
ANTREA_ENDPOINTSLICES: true
这些服务在 PreferDualStack
或 RequireDualStack
规范中指定了 ipFamilyPolicy
,现在可以通过 IPv4 或 IPv6 访问。
注意上游 Kubernetes 中的双堆栈功能的端到端测试可能会失败,因为集群节点仅通告其主 IP 地址(本例中为 IPv4 地址)作为其 IP 地址。