我有两个 AKS(开发和 QA),我想与 Azure 中的一个 APP 网关共享。 我使用 HELM 部署了 AGIC 并在两个集群上启用了共享。 使用 YAML 文件将入口部署到 DEV 效果很好,但一旦我为 QA 部署相同的文件,它就会被默认地址池覆盖。
我不确定是否是因为我在两个集群的 YAML 中使用相同的域名?我们每个都有不同的子域。
我们还在每个集群中使用相同的路径,但我认为这并不重要,因为它们是两个独立的 AKS。
DEV yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-api
namespace: default
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard-certificate"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: dev-api.example.com
- http:
paths:
- path: /manager/*
pathType: Prefix
backend:
service:
name: manager-api
port:
number: 80
QA yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-api
namespace: default
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard-certificate"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: test-api.example.com
- http:
paths:
- path: /manager/*
pathType: Prefix
backend:
service:
name: manager-api
port:
number: 80
头盔版 version.BuildInfo{版本:“v3.10.0”,GitCommit:“ce66412a723e4d89555dc67217607c6579ffcb21”,GitTreeState:“干净”,GoVersion:“go1.18.6”}
曾经位于 Helm 图表 ingress-azure-1.5.2 上 但现在使用 ingress-azure-1.6.0-rc1
我还尝试为主机名配置一些 AzureIngressProhibitedTargets,我不希望它在创建后触及,但由于有两个单独的 AKS,我认为这并不重要。
我期望每个 YAML 为每个 AKS DEV 和 QA 创建入口侦听器、规则等。 但它却用另一个覆盖了一个。
我的目标是如果可能的话让两个 AKS 共享一个应用程序网关。
我找到了另一个注释来添加到我的 Ingress YAML,它通过不修改已创建的内容来帮助我的 AzureIngressProhibitedTarget 正常工作。
注释是: appgw.ingress.kubernetes.io/主机名扩展
现在我可以使用两个具有共享 APPGW 的集群,并且一个集群创建的 Ingress 不会影响另一个集群。
是的,您可以在 2 个 AKS 集群之间共享一个应用程序网关,但您必须正确配置 AzureIngressProhibitedTarget,以便 DEV AGIC 不会覆盖此处定义的 QA AGIC。请参阅以下禁令。 在DEV集群中配置
cat <<EOF | kubectl apply -f -
apiVersion: "appgw.ingress.k8s.io/v1"
kind: AzureIngressProhibitedTarget
metadata:
name: test-api-prohibition
spec:
hostname: test-api.example.com
EOF
在 QA 集群中
cat <<EOF | kubectl apply -f -
apiVersion: "appgw.ingress.k8s.io/v1"
kind: AzureIngressProhibitedTarget
metadata:
name: dev-api-prohibition
spec:
hostname: dev-api.example.com
EOF
配置上述禁止应该可以解决敏捷覆盖应用程序网关侦听器配置的问题。
DEV.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-api
namespace: default
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/hostname-extension: "dev-api.example.com"
spec:
rules:
- host: dev-api.example.com
- http:
paths:
- path: /manager/*
pathType: Prefix
backend:
service:
name: manager-api
port:
number: 80
QA.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-api
namespace: default
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/hostname-extension: "qa-api.example.com"
spec:
rules:
- host: qa-api.example.com
- http:
paths:
- path: /manager/*
pathType: Prefix
backend:
service:
name: manager-api
port:
number: 80
DEV 入口在应用程序网关上完美地创建所有必要的设置,但每当我创建 QA 入口时,AGIC 都会使用与 QA POD 相关的 IP 覆盖 DEV 后端池 IP。
看起来发生这种情况是因为 AGIC 使用 POD_NAME-SERVICE_NAME-PORT 创建后端池名称。如果有人可以建议如何解决这个问题,我会很高兴。