【问题标题】:AKS connected to an Azure subnet in a private vnet with terraformAKS 使用 terraform 连接到专用 vnet 中的 Azure 子网
【发布时间】:2022-02-16 04:07:02
【问题描述】:

我想使用 terraform 将 AKS 群集连接到内部 VNET/子网。理想情况下,我希望为该服务分配一个 IP,并为该服务中的所有 Pod 维护一个私有服务 IP。比如:

  • vnet/子网 IP cidr 为 172.16.0.0/16
  • 服务 cidr 为 172.16.1.0/24
  • pod 位于 10.10.10.0/24

基本上单个 IP 被分配给服务 cidr。这样我们就可以保持 pod 和外部世界之间的隔离。然后,我将设置一个入口控制器,以允许外部访问,如果 pod 需要访问内部 vnet 上的资源,它们应该能够通过服务 --> 子网等进行路由。

我看不出让它工作。在 terraform 中配置它的最佳方法是什么?

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster#network_profile

要明确的是,我不希望每个 pod 都接收分配的子网地址。

【问题讨论】:

    标签: terraform azure-aks


    【解决方案1】:

    您可以使用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 将使用 LoadBalancerPublicIP。或者,您可以将 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
    

    【讨论】:

    • 感谢菲利普。我会试试的
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2019-03-01
    • 1970-01-01
    • 2022-01-15
    • 2021-09-07
    • 1970-01-01
    • 2018-08-15
    • 2018-11-14
    相关资源
    最近更新 更多