如何让单个 Ingress 仅由 AKS 上的两个 HAProxy Ingress 控制器之一处理?
How do I get a single Ingress to be handled by just one of two HAProxy Ingress Controllers on AKS?
我有两个独立的 IngressController,一个在内部,一个在外部。我想定义每个 Ingress 使用哪个控制器。
我已经为外部控制器定义了 --ingress.class=hapxroxy-ext
arg,为内部控制器定义了 --empty-ingress-class
。
入口服务
apiVersion: v1
kind: Service
metadata:
annotations:
labels:
run: ext-haproxy-ingress
name: ext-haproxy-ingress
namespace: ext-haproxy-controller
spec:
selector:
run: ext-haproxy-ingress
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
annotations:
"service.beta.kubernetes.io/azure-load-balancer-internal": "true"
labels:
run: haproxy-ingress
name: haproxy-ingress
namespace: haproxy-controller
spec:
selector:
run: haproxy-ingress
type: LoadBalancer
我有 IngressClasses。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: haproxy.org/ingress-controller/hapxroxy-ext
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: internal-lb
annotations:
"ingressclass.kubernetes.io/is-default-class": "true"
spec:
controller: haproxy.org/ingress-controller
我有一个 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
annotations:
"kubernetes.io/ingress.class": internal-lb
spec:
ingressClassName: internal-lb
...
尽管将 Ingress 映射到 internal-lb
,但 internal-lb
和 external-lb
都处理请求。
在 docs 中看起来很简单,但我遗漏了一些东西。
此问题是由于在 ingress.yaml 中使用 IngressClassName 时 https://github.com/haproxytech/kubernetes-ingress 中存在错误。如果您从 ingress.yaml 中删除 IngressClassName 并仅使用“kubernetes.io/ingress.class”:注释问题就会消失,它更像是一种解决方法而不是修复方法。
此问题已提出且仍未解决,请参阅下面的 link 了解更新。
https://github.com/haproxytech/kubernetes-ingress/issues/354#issuecomment-904551220
我有两个独立的 IngressController,一个在内部,一个在外部。我想定义每个 Ingress 使用哪个控制器。
我已经为外部控制器定义了 --ingress.class=hapxroxy-ext
arg,为内部控制器定义了 --empty-ingress-class
。
入口服务
apiVersion: v1
kind: Service
metadata:
annotations:
labels:
run: ext-haproxy-ingress
name: ext-haproxy-ingress
namespace: ext-haproxy-controller
spec:
selector:
run: ext-haproxy-ingress
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
annotations:
"service.beta.kubernetes.io/azure-load-balancer-internal": "true"
labels:
run: haproxy-ingress
name: haproxy-ingress
namespace: haproxy-controller
spec:
selector:
run: haproxy-ingress
type: LoadBalancer
我有 IngressClasses。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: haproxy.org/ingress-controller/hapxroxy-ext
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: internal-lb
annotations:
"ingressclass.kubernetes.io/is-default-class": "true"
spec:
controller: haproxy.org/ingress-controller
我有一个 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
annotations:
"kubernetes.io/ingress.class": internal-lb
spec:
ingressClassName: internal-lb
...
尽管将 Ingress 映射到 internal-lb
,但 internal-lb
和 external-lb
都处理请求。
在 docs 中看起来很简单,但我遗漏了一些东西。
此问题是由于在 ingress.yaml 中使用 IngressClassName 时 https://github.com/haproxytech/kubernetes-ingress 中存在错误。如果您从 ingress.yaml 中删除 IngressClassName 并仅使用“kubernetes.io/ingress.class”:注释问题就会消失,它更像是一种解决方法而不是修复方法。
此问题已提出且仍未解决,请参阅下面的 link 了解更新。
https://github.com/haproxytech/kubernetes-ingress/issues/354#issuecomment-904551220