要在 Kubernetes 集群中使用 NSX Advanced Load Balancer 作为输入控制器,您必须具有 NSX ALB Enterprise 版本。或者,也可以使用 Contour 作为 Tanzu Kubernetes Grid 集群中的输入控制器。
在 Tanzu Kubernetes Grid 中通过 AKO 集成时,NSX ALB 支持三种输入模式:NodePort、ClusterIP 和 NodePortLocal。根据您的要求选择类型。
选择对 NSX ALB 输入使用 NodePort 模式时,输入后端服务必须为 NodePort 模式。在此类型中,网络流量在到达 Pod 之前从客户端路由到 NSX ALB SE,然后路由到集群节点。NSX ALB SE 将流量路由到 节点,并且 kube-proxy
可帮助将流量从节点路由到目标 Pod。
下图介绍了如何在 NodePort
模式下路由网络流量:
NodePort 模式支持在不同的集群之间共享 NSX ALB SE。但是,这种类型的服务可能会公开集群中的端口,因为它需要使用 NodePort 模式后端服务。此外,还需要为 kube-proxy
提供一个额外的跃点,以将流量从节点路由到 Pod。
要在管理集群上配置 NodePort 输入模式,请执行以下操作:
创建 AKODeploymentConfig
CR 对象,如下所示:
apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
kind: AKODeploymentConfig
metadata:
name: install-ako-for-l7-node-port
spec:
adminCredentialRef:
name: avi-controller-credentials
namespace: tkg-system-networking
certificateAuthorityRef:
name: avi-controller-ca
namespace: tkg-system-networking
controller: 10.191.192.137
cloudName: Default-Cloud
serviceEngineGroup: Default-Group
clusterSelector:
matchLabels:
nsx-alb-node-port-l7: "true"
controlPlaneNetwork:
cidr: 10.191.192.0/20
name: VM Network
dataNetwork:
cidr: 10.191.192.0/20
name: VM Network
extraConfigs:
cniPlugin: antrea
disableStaticRouteSync: true
ingress:
defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
disableIngressClass: false # required
serviceType: NodePort # required
shardVSSize: SMALL
nodeNetworkList: # required
- networkName: VM Network
cidrs:
- 10.191.192.0/20
在管理集群上应用更改:
kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port.yaml
要在工作负载集群上启用 NodePort 输入模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:
AVI_LABELS: '{"nsx-alb-node-port-l7":"true"}'
使用 tanzu cluster create
命令创建工作负载集群。
有关将工作负载集群部署到 vSphere 的详细信息,请参见创建工作负载集群。
现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-node-port
AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS
的工作负载集群上使用 NodePort 模式。
在 ClusterIP 模式下,网络流量从客户端路由到 NSX ALB SE,然后再路由到 Pod。此模式需要 ClusterIP 作为输入后端服务类型。NSX ALB SE 利用静态路由将流量路由到 Pod。
下图介绍了如何在 ClusterIP
模式下路由网络流量:
ClusterIP 模式通过将网络流量直接从 SE 路由到 Pod 来简化网络流量。此模式还可以防止在集群中公开端口。但是,在此模式下,无法在集群之间共享 SE,因为必须将 SE 连接到集群。
要启用此功能,请执行以下操作:
创建 AKODeploymentConfig
CR 对象,如下所示:
apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
kind: AKODeploymentConfig
metadata:
name: install-ako-for-l7-cluster-ip
spec:
adminCredentialRef:
name: avi-controller-credentials
namespace: tkg-system-networking
certificateAuthorityRef:
name: avi-controller-ca
namespace: tkg-system-networking
controller: 10.191.192.137
cloudName: Default-Cloud
serviceEngineGroup: SEG-2 # must be unique, can only be used for one cluster
clusterSelector:
matchLabels:
nsx-alb-cluster-ip-l7: "true"
controlPlaneNetwork:
cidr: 10.191.192.0/20
name: VM Network
dataNetwork:
cidr: 10.191.192.0/20
name: VM Network
extraConfigs:
cniPlugin: antrea
disableStaticRouteSync: false # required
ingress:
defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
disableIngressClass: false # required
serviceType: ClusterIP # required
shardVSSize: SMALL
nodeNetworkList: # required
- networkName: VM Network
cidrs:
- 10.191.192.0/20
在管理集群上应用更改:
kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-cluster-ip.yaml
要在工作负载集群上启用 ClusterIP Ingress 模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:
AVI_LABELS: '{"nsx-alb-cluster-ip-l7":"true"}'
使用 tanzu cluster create
命令创建工作负载集群。
有关将工作负载集群部署到 vSphere 的详细信息,请参见创建工作负载集群。
现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-cluster-ip
AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS
的工作负载集群上使用 ClusterIP 模式。
要在其他工作负载集群上启用 ClusterIP 输入模式,您必须在 Avi 控制器中创建新的 SE,然后创建新的 AKODeploymentConfig
对象以指定新 SE 的名称,然后再在管理集群上应用该文件。
如果使用 Antrea 作为 CNI,则可以在 NSX ALB 上启用 NodePortLocal 输入模式。它利用 Antrea 的 NodePortLocal 功能直接将流量从 SE 路由到 Pod。在此模式下,网络流量从客户端路由到 NSX ALB SE,然后再路由到 Pod。此模式需要 ClusterIP 作为输入后端类型。此外,ANTREA_NODEPORTLOCAL
配置变量必须在 Tanzu Kubernetes Grid 中设置为 true
。有关 Antrea 中的 NodePortLocal 功能的详细信息,请参见 Antrea Documentation 中的 NodePortLocal (NPL)。
下图介绍了如何在 NodePortLocal
模式下路由网络流量:
NodePortLocal
模式通过将网络流量直接从 SE 路由到 Pod 来简化网络流量。此模式支持集群的共享 SE,并防止在集群中公开端口。
要在现有管理集群上配置 NodePortLocal 输入模式,请执行以下操作:
创建 AKODeploymentConfig
CR 对象,如下所示:
apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
kind: AKODeploymentConfig
metadata:
name: install-ako-for-l7-node-port-local
spec:
adminCredentialRef:
name: avi-controller-credentials
namespace: tkg-system-networking
certificateAuthorityRef:
name: avi-controller-ca
namespace: tkg-system-networking
controller: 10.191.192.137
cloudName: Default-Cloud
serviceEngineGroup: Default-Group
clusterSelector:
matchLabels:
nsx-alb-node-port-local-l7: "true"
controlPlaneNetwork:
cidr: 10.191.192.0/20
name: VM Network
dataNetwork:
cidr: 10.191.192.0/20
name: VM Network
extraConfigs:
cniPlugin: antrea
disableStaticRouteSync: true
ingress:
defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
disableIngressClass: false # required
serviceType: NodePortLocal # required
shardVSSize: SMALL
nodeNetworkList: # required
- networkName: VM Network
cidrs:
- 10.191.192.0/20
在管理集群上应用更改:
kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port-local.yaml
要在工作负载集群上启用 NodePortLocal 输入模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:
AVI_LABELS: '{"nsx-alb-node-port-local-l7":"true"}'
ANTREA_NODEPORTLOCAL: "true"
使用 tanzu cluster create
命令创建工作负载集群。
现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-node-port-local
AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS
的工作负载集群上使用 NodePortLocal 模式。
如果使用 NSX ALB 作为集群端点 VIP 提供程序,则管理集群中仅支持 NodePort 输入模式。如果不使用 NSX ALB 作为集群端点 VIP 提供程序,则支持所有三种输入模式。
要在管理集群中启用 L7 输入,请执行以下操作:
编辑管理集群中的 AKODeploymentConfig
文件:
kubectl --context=MGMT-CLUSTER-CONTEXT edit adc install-ako-for-management-cluster
在打开的文件中,修改 spec.extraConfigs.ingress
字段,如以下示例中所示:
extraConfigs:
cniPlugin: antrea
disableStaticRouteSync: true
ingress:
defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
disableIngressClass: false # required
serviceType: NodePort # required
shardVSSize: SMALL
nodeNetworkList: # required
- networkName: VM Network
cidrs:
- 10.191.192.0/20