Kubernetes - входная конфигурация, два пути перенаправляются в разные пространства имен - PullRequest
0 голосов
/ 24 марта 2020

Я борюсь с входной конфигурацией, которая предоставит доступ из двух различных путей к службам, развернутым в различных пространствах имен .

1 # Вход:

    # Source: deployment/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: portal-api
  labels:
    helm.sh/chart: deployment-0.1.0
    app.kubernetes.io/name: deployment
    app.kubernetes.io/instance: portal-api
    app.kubernetes.io/version: "0.0.1"
    app.kubernetes.io/managed-by: Helm
  annotations:
    certmanager.k8s.io/acme-challenge-type: http01
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    kuberentes.io/tls-acme: "true"
    kubernetes.io/ingress.class: nginx
spec:
  tls:
    - hosts:
        - "example.com"
      secretName: portal-certificate
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /api/rest/(.*)
            backend:
              serviceName: portal-api
              servicePort: 80

2 Ingress

# Source: deployment/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: portal-ui
  labels:
    helm.sh/chart: deployment-0.1.0
    app.kubernetes.io/name: deployment
    app.kubernetes.io/instance: portal-ui
    app.kubernetes.io/version: "0.0.1"
    app.kubernetes.io/managed-by: Helm
  annotations:
    certmanager.k8s.io/acme-challenge-type: http01
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  tls:
    - hosts:
        - "example.com"
      secretName: portal-certificate
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /(.*)
            backend:
              serviceName: portal-ui
              servicePort: 80

Маршрутизация для path example.com - работает, его перенаправление на portal-ui. Маршрутизация для пути example.com/api/rest/(something) - не работает, его перенаправление на службу portal-ui.

Я думаю, что он будет работать в одном и том же пространстве имен ... Но мне нужны два пространства имен за каждую услугу.

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Как упомянул @Arghya Sadhu

Вход и соответствующая служба должны находиться в одном пространстве имен, иначе вход не может обнаружить конечные точки из службы.

Существует выпуск github открыт с 2015 года, и все еще обсуждается, как заставить его работать.

На данный момент можно создать вход в том же пространстве имен

Пример, сделанный участником проблемы github @ aledbf

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: component1
  namespace: component1
spec:
  rules:
  - host: domain.com
    http:
      paths:
      - backend:
          serviceName: component1
          servicePort: 80
        path: /component1
apiVersion: extensions/v1beta1


kind: Ingress
metadata:
  name: component2
  namespace: component2
spec:
  rules:
  - host: domain.com
    http:
      paths:
      - backend:
          serviceName: component2
          servicePort: 80
        path: /component2

ИЛИ


Вы можете попробовать обходной путь сделан участником проблемы github @ chestack

мой обходной путь:

serviceA в пространстве именA

create serviceB в пространстве именB

spec:
    ...
    type: ExtertalName
    externalName: serviceA.namespaceA.svc.cluster.local

добавить правило входа в ingressB в пространстве именB

- path: /****
        backend:
          serviceName: serviceB
          servicePort: ***
1 голос
/ 24 марта 2020

Вход и соответствующая служба должны находиться в одном пространстве имен, иначе вход не сможет обнаружить конечные точки службы. Поэтому создайте ingress1, service1 в пространстве имен1 и ingress2, service2 в пространстве имен2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...