您可以使用kubenet 作为CNI。 Kubenet 使用所谓的覆盖网络并因此进行 NAT,这意味着 AKS 集群节点在您的子网中获取 IP,并且 Pod 从逻辑上不同的地址空间接收 IP 地址。
老实说,我会向用户推荐您指定的更大的网络(至少 /16):
注意:如果 Vnet 和子网已经存在,您需要使用 Terraform 将它们导入以在那里创建您的 AKS。
network_profile {
network_plugin = kubenet
pod_cidr = 10.10.10.0/24
service_cidr = 172.16.1.0/24
docker_bridge_cidr = 172.18.0.1/16
dns_service_ip = 172.16.1.10
outbound_type = userDefinedRouting
}
default_node_pool {
vnet_subnet_id = azurerm_subnet.YOUR_SUBNET.id
...
}
出口:
Kubernetes 会将出口流量路由到您描述/想要的子网,而不是从服务到子网。默认情况下,AKS 将使用 LoadBalancer 和 PublicIP。或者,您可以将 userDefinedRouting 指定为 AKS 的出站类型并创建自己的路由。
入口:
入口将通过 Azure LoadBalancer 路由到 AKS。 Ingress 控制器将获得一个公共 IP,您也可以使用 terraform 提前创建该 IP(只有 PublicIP,而不是 LoadBalancer)并分配给 Ingress Controller 的 Service。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-resource-group: myResourceGroup # only needed if the LB is in another RG
name: ingress-nginx-controller
spec:
loadBalancerIP: <YOUR_STATIC_IP>
type: LoadBalancer
您还可以创建一个internal LoadBalancer 并从您的子网分配一个私有 IP:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
name: ingress-nginx-controller-internal
spec:
loadBalancerIP: <YOUR_STATIC_PRIVATE_IP>
type: LoadBalancer