Kubernetes Ingress для одного и того же хоста в другом пространстве имен
У меня есть две услуги, tea
а также coffee
, каждый находится в своем собственном пространстве имен, я хотел бы domain.com
идти в tea
обслуживание и domain.com/coffee
идти coffee
,
Поскольку каждый из них находится в пространстве имен, мне пришлось сделать два входа, но когда я пытаюсь применить их, я получаю ошибку MAPPING Path '/coffee' already defined in another Ingress rule
,
Мои две части входа выглядят следующим образом:
Чай:
kind: Ingress
apiVersion: extensions/v1beta1
spec:
tls:
- hosts:
- domain.com
secretName: tea-tls
rules:
- host: domain.com
http:
paths:
- path: /
backend:
serviceName: tea
servicePort: 80
и кофе:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: coffee
namespace: coffee
spec:
tls:
- hosts:
- domain.com
secretName: coffee}-tls
rules:
- host: domain.com
http:
paths:
- path: /coffee
backend:
serviceName: coffee
servicePort: 80
- path: /coffee/*
backend:
serviceName: coffee
servicePort: 80
2 ответа
Я полагаю, что проблема не в чае и кофе, а в определении coffee
Путь дважды в кофейном пороге. Согласно https://kubernetes.io/docs/concepts/services-networking/ingress/, я предполагаю, что вам нужны только /coffee
путь, и можете удалить /coffee/*
дорожка.
Согласно https://github.com/kubernetes/kubernetes/issues/17088, входной контроллер Voyager может справиться с задачей. Пример (взят по ссылке):
apiVersion: voyager.appscode.com/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: foo
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: s1.bar # serviceName.Namespace
servicePort: '80'