Azure容器服务(AKS):如何向其他VNET资源暴露容器?
针对你用预览版AKS(自动分配VNET)的场景,我整理了几个靠谱的实现方式,你可以根据自己的需求挑选:
方案1:VNET对等连接(最常用、成本低)
这是跨VNET访问最直接的方式,只要把AKS自动创建的VNET和目标VNET做双向对等,就能打通网络:
先找到AKS的VNET信息
首先得拿到AKS节点所在的资源组,用CLI命令:az aks show --resource-group <你的AKS资源组名> --name <AKS集群名> --query nodeResourceGroup -o tsv接着用这个资源组名查询AKS的VNET详情:
az network vnet list --resource-group <上面拿到的节点资源组名>记下来VNET的名称和地址空间,比如
aks-vnet-xxx和10.240.0.0/16。建立双向VNET对等连接
- 先在AKS的VNET里创建指向目标VNET的对等连接,允许双向流量;
- 再在目标VNET里创建指向AKS VNET的对等连接,同样允许双向流量;
- 注意两个VNET的地址空间不能重叠,否则对等会失败。
配置内部服务的访问入口
给你的内部API创建Internal Load Balancer类型的Service,这样AKS会在自己的VNET里分配一个私有IP,其他VNET的资源就能直接通过这个私有IP访问API了。示例YAML:apiVersion: v1 kind: Service metadata: name: internal-api-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: internal-api最后别忘了在AKS节点的NSG里添加入站规则,允许目标VNET的地址空间访问你API的端口。
方案2:Azure Private Link(更安全、适合跨租户/严格隔离场景)
如果你的场景需要更严格的网络隔离,或者要跨Azure租户访问,Private Link是更好的选择:
创建Internal Load Balancer服务
先按上面的方式创建一个Internal Load Balancer的Service,拿到它的私有IP或者保留的IP。为服务创建Private Endpoint
在目标VNET里创建Private Endpoint,关联到AKS的Internal Load Balancer服务。这样目标VNET里的资源就能通过这个Private Endpoint访问AKS的内部服务,流量完全走Azure骨干网,不会暴露到公网。配置Private DNS解析
创建或关联Private DNS区域,把你API的域名解析到Private Endpoint的IP,这样目标VNET里的资源就能用域名访问了。
注意事项
- 预览版AKS自动创建的VNET默认启用了网络策略(比如Calico),要确保策略允许目标VNET的流量访问内部服务;
- 如果用VNET对等,要确认两个VNET的路由表没有冲突;
- 测试的时候可以先在目标VNET里部署一个测试VM,ping AKSService的私有IP,或者curl API端口,验证连通性。
内容的提问来源于stack exchange,提问作者watdo

