若要在 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 模式。在此類型中,網路流量會從用戶端路由到 NSX ALB SE,接著路由到叢集節點,然後才會抵達網繭。NSX ALB SE 會將流量路由到節點,且 kube-proxy
會協助將流量從節點路由到目標網繭。
下圖說明在 NodePort
模式下如何路由網路流量:
NodePort 模式支援在不同的叢集之間共用 NSX ALB SE。但是,這種類型的服務可能會公開叢集中的連接埠,因為它需要使用 NodePort 模式後端服務。此外,還需要為 kube-proxy
提供額外的躍點,以將流量從節點路由到網繭。
若要在管理叢集上設定 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 入口服務提供者,以便使該提供者在其 AVI_LABELS
與 install-ako-l7-node-port
AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集中,使用 NodePort 模式。
在 ClusterIP 模式下,網路流量會從用戶端路由到 NSX ALB SE,然後再路由到網繭。此模式需要 ClusterIP 作為入口後端服務類型。NSX ALB SE 會利用靜態路由,將流量路由到網繭。
下圖說明在 ClusterIP
模式下如何路由網路流量:
ClusterIP 模式會將網路流量直接從 SE 路由到網繭,來簡化網路流量。此模式還能防止在叢集中公開連接埠。但是,在此模式下,無法在叢集之間共用 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 入口模式,請建立工作負載叢集組態 YAML 檔案,並新增以下欄位:
AVI_LABELS: '{"nsx-alb-cluster-ip-l7":"true"}'
使用 tanzu cluster create
命令來部署工作負載叢集。
如需有關將工作負載叢集部署到 vSphere 的詳細資訊,請參閱建立工作負載叢集。
現在,已設定 NSX ALB 入口服務提供者,以便使該提供者在其 AVI_LABELS
與 install-ako-l7-cluster-ip
AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集上,使用 ClusterIP 模式。
若要在其他工作負載叢集上啟用 ClusterIP 入口模式,您必須在 Avi 控制器中建立新的 SE,然後建立新的 AKODeploymentConfig
物件以指定新 SE 的名稱,然後再將該檔案套用至管理叢集。
如果使用 Antrea 作為 CNI,您可以在 NSX ALB 上啟用 NodePortLocal 入口模式。它會利用 Antrea 的 NodePortLocal 功能,直接將流量從 SE 路由到網繭。在此模式下,網路流量會從用戶端路由到 NSX ALB SE,然後再路由到網繭。此模式需要 ClusterIP 作為入口後端類型。此外,ANTREA_NODEPORTLOCAL
組態變數必須在 Tanzu Kubernetes Grid 中設定為 true
。如需有關 Antrea 中的 NodePortLocal 功能的詳細資訊,請參閱 Antrea 說明文件中的 NodePortLocal (NPL)。
下圖說明在 NodePortLocal
模式下如何路由網路流量:
NodePortLocal
模式會將網路流量直接從 SE 路由到網繭,來簡化網路流量。此模式支援叢集共用 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 入口服務提供者,以便使該提供者在其 AVI_LABELS
與 install-ako-l7-node-port-local
AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集中,使用 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