我正在尝试创建一个带有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"
放在入口注解中的原因。
- 但是我需要这个pod是内部的(它应该通过一个私有IP的入口暴露)**这就是为什么我把
但我得到了以下错误:
"警告"原因:"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?
有人能帮帮我吗?
1条答案
按热度按时间gzjq41n41#
然后,您需要使用azurerm_application_gateway资源创建应用程序网关,然后使用ingress_application_gateway块的gateway_id属性引用它。