Terraform -如何使用AGIC创建Azure Kubernetes集群,从而创建具有私有IP的应用网关

68bkxrlz  于 2023-03-07  发布在  Kubernetes
关注(0)|答案(1)|浏览(187)

我正在尝试创建一个带有ingress_application_gateway插件的AKS Kubernetes集群,它将创建一个应用程序网关。我正在使用terraform来创建它。请参考下面我的terraform代码。

resource "azurerm_kubernetes_cluster" "k8s_cluster" {
  
  . . . 

  private_cluster_enabled = true
  

  ingress_application_gateway {
    gateway_name = "${var.cluster_name}-agic"
    subnet_cidr = "172.29.20.0/22" 
  }

  . . . 

}

上面的代码将创建一个安装了AGIC(应用网关入口控制器)的集群。
到目前为止一切正常。
然后,我尝试使用ingress部署应用程序,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: aspnetapp
  labels:
    app: aspnetapp
spec:
  containers:
  - image: nginx
    name: aspnetapp-image
    ports:
    - containerPort: 80
      protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: aspnetapp
spec:
  selector:
    app: aspnetapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/use-private-ip: "true"  
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: aspnetapp
            port:
              number: 80

这将按预期创建一个pod、一个service和一个ingress

    • 但是我需要这个pod是内部的(它应该通过一个私有IP的入口暴露)**这就是为什么我把appgw.ingress.kubernetes.io/use-private-ip: "true"放在入口注解中的原因。

但我得到了以下错误:
"警告"原因:"NoPrivateIP"忽略入口默认值/最小入口,因为它要求应用程序网关test-svg-cluster-agic具有专用IP地址
这是因为创建入口时创建的应用网关没有专用IP。
但是也不可能在terraform中设置这些条件(由入口创建的应用网关应该具有私有IP以及公共IP),因为ingress_application_gateway块的所有支持参数如下:

  • gateway_id-要与此Kubernetes集群的入口控制器集成的应用网关的ID。
  • gateway_name-要在Nodepool资源组中使用或创建的应用网关的名称,该应用网关将与此Kubernetes集群的入口控制器集成。
  • subnet_cidr-用于创建应用网关的子网CIDR,该应用网关将与此Kubernetes集群的入口控制器集成。
  • subnet_id-子网的ID

如何在terraform代码中指定,以便在创建入口时,AGIC也为应用程序网关提供私有IP,而不仅仅是公共IP?
有人能帮帮我吗?

gzjq41n4

gzjq41n41#

然后,您需要使用azurerm_application_gateway资源创建应用程序网关,然后使用ingress_application_gateway块的gateway_id属性引用它。

相关问题