无法从对等 v-net 连接到专用 v-net 上的 AKS 内部入口
Cant connect to AKS internal ingress on private v-net from peered v-net
我们有一个原始网络,其中包含许多 linux 个带有 docker 群容器的虚拟机。我们正在将它们迁移到 AKS,但这必须分步进行。目前我们已经在私有子网上设置了一个入口,如下所示,使用以下示例 https://docs.microsoft.com/en-us/azure/aks/ingress-internal-ip
问题:- 当连接到原始 v-net 时,我们无法连接到 2 子网上的 10.3.0.4,即 10.0.0.12:80 -> 10.3.0.4:80。在与 AKS 集群位于同一子网上的测试虚拟机上,我们可以很好地连接到 10.3.0.4。
我们可以从原始 v-net 连接到 nic 中的服务端点,即 10.0.0.12:80 -> 10.3.3.134:80/。
这不是解决方案,因为我们可以有多个副本。
知道为什么负载均衡器对原始 v-net 不可见吗?
Connected Devices in V-Net
original subnet
//10.0.0.0/24
10.0.0.0 - 10.0.0.255 (65536 addresses)
//10.0.1.0/24
10.0.1.0 - 10.0.1.255 (65536 addresses)
彼此设置了对等
aks subnet
10.3.0.0/16
10.3.0.0 - 10.3.255.255 (65536 addresses)
az aks create \
--resource-group AKS_Workshop \
--name workshop-aks-cluster \
--network-plugin azure \
--vnet-subnet-id "/subscriptions/../resourceGroups/AKS_Workshop/providers/Microsoft.Network/virtualNetworks/aksvnet/subnets/default" \
--docker-bridge-address 172.17.0.1/16 \
--dns-service-ip 10.4.0.2 \
--service-cidr 10.4.0.0/16 \
--generate-ssh-keys \
--max-pods 96 \
--node-vm-size Standard_DS2_v2
controller:
service:
loadBalancerIP: 10.3.0.4
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
helm install stable/nginx-ingress /
--name backend-ingress /
--namespace ingress -f ingress-basic.yaml
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-helloworld ClusterIP 10.4.121.75 <none> 80/TCP 25h
backend-ingress-nginx-ingress-controller LoadBalancer 10.4.233.18 10.3.0.4 80:30904/TCP,443:32023/TCP 23h
backend-ingress-nginx-ingress-default-backend ClusterIP 10.4.198.93 <none> 80/TCP 23h
ingress-demo ClusterIP 10.4.53.2 <none> 80/TCP 25h
Name: ingress-demo
Namespace: ingress
Labels: <none>
Annotations: <none>
Selector: app=acs-helloworld-saucy-antelope
Type: ClusterIP
IP: 10.4.53.2
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.3.3.134:80
Session Affinity: None
Events: <none>
原来这个问题与2个v-net在不同地区有关。一旦我在同一区域创建了一个 v-net,我就可以毫无问题地访问内部负载平衡器端点,因为它说你可以访问内部端点,但是如果你为你的平衡器设置了多个副本,你只能访问其中一个端点因此使其变得毫无意义
VNet 对等互连
什么是 VNet 对等互连?
VNet 对等互连(或虚拟网络对等互连)使您能够连接虚拟网络。虚拟网络之间的 VNet 对等连接使你能够通过 IPv4 地址在它们之间私密地路由流量。对等 VNet 中的虚拟机可以相互通信,就好像它们在同一网络中一样。这些虚拟网络可以位于同一区域或不同区域(也称为全球 VNet 对等互连)。也可以跨 Azure 订阅创建 VNet 对等连接。
我可以在不同区域创建到 VNet 的对等连接吗?
是的。全球 VNet 对等互连使你能够对等不同区域中的 VNet。全球 VNet 对等互连在所有 Azure public 区域、中国云区域和政府云区域可用。您无法在全球范围内从 Azure public 区域对等到国家云区域。
与全局 VNet 对等互连和负载均衡器相关的约束是什么?
如果两个不同区域中的两个虚拟网络通过全局 VNet 对等互连,则无法通过负载均衡器的前端 IP 连接到基本负载均衡器后面的资源。标准负载均衡器不存在此限制。以下资源可以使用基本负载均衡器,这意味着您无法通过负载均衡器的前端 IP 通过全局 VNet 对等访问它们。但是,如果允许,您可以使用全局 VNet 对等互连通过其专用 VNet IP 直接访问资源。
基本负载均衡器后面的 VM
具有基本负载均衡器的虚拟机规模集
Redis缓存
应用程序网关 (v1) SKU
服务架构
SQL 米
API 管理层
Active Directory 域服务 (ADDS)
逻辑应用
洞察力
天蓝色批次
应用服务环境
您可以通过 VNet 网关通过 ExpressRoute 或 VNet 到 VNet 连接到这些资源。
我们有一个原始网络,其中包含许多 linux 个带有 docker 群容器的虚拟机。我们正在将它们迁移到 AKS,但这必须分步进行。目前我们已经在私有子网上设置了一个入口,如下所示,使用以下示例 https://docs.microsoft.com/en-us/azure/aks/ingress-internal-ip
问题:- 当连接到原始 v-net 时,我们无法连接到 2 子网上的 10.3.0.4,即 10.0.0.12:80 -> 10.3.0.4:80。在与 AKS 集群位于同一子网上的测试虚拟机上,我们可以很好地连接到 10.3.0.4。
我们可以从原始 v-net 连接到 nic 中的服务端点,即 10.0.0.12:80 -> 10.3.3.134:80/。
这不是解决方案,因为我们可以有多个副本。
知道为什么负载均衡器对原始 v-net 不可见吗?
Connected Devices in V-Net
original subnet
//10.0.0.0/24
10.0.0.0 - 10.0.0.255 (65536 addresses)
//10.0.1.0/24
10.0.1.0 - 10.0.1.255 (65536 addresses)
彼此设置了对等
aks subnet
10.3.0.0/16
10.3.0.0 - 10.3.255.255 (65536 addresses)
az aks create \
--resource-group AKS_Workshop \
--name workshop-aks-cluster \
--network-plugin azure \
--vnet-subnet-id "/subscriptions/../resourceGroups/AKS_Workshop/providers/Microsoft.Network/virtualNetworks/aksvnet/subnets/default" \
--docker-bridge-address 172.17.0.1/16 \
--dns-service-ip 10.4.0.2 \
--service-cidr 10.4.0.0/16 \
--generate-ssh-keys \
--max-pods 96 \
--node-vm-size Standard_DS2_v2
controller:
service:
loadBalancerIP: 10.3.0.4
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
helm install stable/nginx-ingress /
--name backend-ingress /
--namespace ingress -f ingress-basic.yaml
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-helloworld ClusterIP 10.4.121.75 <none> 80/TCP 25h
backend-ingress-nginx-ingress-controller LoadBalancer 10.4.233.18 10.3.0.4 80:30904/TCP,443:32023/TCP 23h
backend-ingress-nginx-ingress-default-backend ClusterIP 10.4.198.93 <none> 80/TCP 23h
ingress-demo ClusterIP 10.4.53.2 <none> 80/TCP 25h
Name: ingress-demo
Namespace: ingress
Labels: <none>
Annotations: <none>
Selector: app=acs-helloworld-saucy-antelope
Type: ClusterIP
IP: 10.4.53.2
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.3.3.134:80
Session Affinity: None
Events: <none>
原来这个问题与2个v-net在不同地区有关。一旦我在同一区域创建了一个 v-net,我就可以毫无问题地访问内部负载平衡器端点,因为它说你可以访问内部端点,但是如果你为你的平衡器设置了多个副本,你只能访问其中一个端点因此使其变得毫无意义
VNet 对等互连
什么是 VNet 对等互连?
VNet 对等互连(或虚拟网络对等互连)使您能够连接虚拟网络。虚拟网络之间的 VNet 对等连接使你能够通过 IPv4 地址在它们之间私密地路由流量。对等 VNet 中的虚拟机可以相互通信,就好像它们在同一网络中一样。这些虚拟网络可以位于同一区域或不同区域(也称为全球 VNet 对等互连)。也可以跨 Azure 订阅创建 VNet 对等连接。
我可以在不同区域创建到 VNet 的对等连接吗?
是的。全球 VNet 对等互连使你能够对等不同区域中的 VNet。全球 VNet 对等互连在所有 Azure public 区域、中国云区域和政府云区域可用。您无法在全球范围内从 Azure public 区域对等到国家云区域。
与全局 VNet 对等互连和负载均衡器相关的约束是什么?
如果两个不同区域中的两个虚拟网络通过全局 VNet 对等互连,则无法通过负载均衡器的前端 IP 连接到基本负载均衡器后面的资源。标准负载均衡器不存在此限制。以下资源可以使用基本负载均衡器,这意味着您无法通过负载均衡器的前端 IP 通过全局 VNet 对等访问它们。但是,如果允许,您可以使用全局 VNet 对等互连通过其专用 VNet IP 直接访问资源。
基本负载均衡器后面的 VM 具有基本负载均衡器的虚拟机规模集 Redis缓存 应用程序网关 (v1) SKU 服务架构 SQL 米 API 管理层 Active Directory 域服务 (ADDS) 逻辑应用 洞察力 天蓝色批次 应用服务环境
您可以通过 VNet 网关通过 ExpressRoute 或 VNet 到 VNet 连接到这些资源。