Kubernetes Ingress получает ошибку во время работы в minikube ssh - PullRequest
0 голосов
/ 28 мая 2020
• 1000 Выполняется развертывание для обслуживания всего 4 модулей, по 2 каждого образа соответственно Обслуживание с модулями Использование ingress для доступа к службам

Когда я попадаю в minikube от minikube ssh, все API работают правильно. Однако вне его всегда возникает ошибка. Итак, угадайте, что это ошибка в 3 или 4? Но при этом не возникает ошибки подключения (как это было до правильной настройки). Это могут быть настройки безопасности или что?


Настройки и результаты, как показано ниже:

  • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: abc
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: abc
    spec:
      containers:
        - name: nginx
          image: image/abc
          imagePullPolicy: Never
          ports:
            - containerPort: 3000
  selector:
    matchLabels:
      app: abc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: efg
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: efg
    spec:
      containers:
        - name: nginx
          image: image/efg
          imagePullPolicy: Never
          ports:
            - containerPort: 3000
  selector:
    matchLabels:
      app: efg
  • service.yaml
apiVersion: v1
kind: Service
metadata:
  name: abc-service
spec:
  type: NodePort
  selector:
    app: abc
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: efg-service
spec:
  type: NodePort
  selector:
    app: efg
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  • ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web
spec:
  rules:
    - host: my.host.com
      http:
        paths:
          - path: /abc
            backend:
              serviceName: abc-service
              servicePort: 80
          - path: /efg
            backend:
              serviceName: efg-service
              servicePort: 80
  • kubectl describe результат:
Name:             web
Namespace:        default
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host         Path    Backends
  ----         ----    --------
  my.host.com
               /abc    abc-service:80 (172.18.0.4:3000,172.18.0.6:3000)
               /efg    efg-service:80 (172.18.0.5:3000,172.18.0.7:3000)
Annotations:   Events
  Type         Reason  Age               From                      Message
  ----         ------  ----              ----                      -------
  Normal       CREATE  24m               nginx-ingress-controller  Ingress default/web
  Normal       UPDATE  3s (x4 over 23m)  nginx-ingress-controller  Ingress default/web
  • minikube ip получает 172.17.0.4

  • / etc / hosts

172.17.0.4    my.host.com
  • Запуск curl 172.18.0.4:3000 дает ожидаемый результат (json) успешно
  • Запуск curl my.host.com/abc, он получает
<!DOCTYPE html>



Error


Cannot GET /abc

1 Ответ

1 голос
/ 29 мая 2020

Наконец-то мой кубернет работает. Здесь, чтобы подвести итоги прогресса:

  1. Как предлагается в комментариях выше, добавьте nginx.ingress.kubernetes.io/rewrite-target: / в аннотации ingress.yaml
  2. Но тогда новая проблема заключалась в том, что каждый маршрут отображается одинаково к root api каждой службы. Вот решение: проблема с префиксом api входящей маршрутизации

Наконец, мой новый ingress.yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: web
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: my.host.com
      http:
        paths:
          - path: /abc/?(.*)
            backend:
              serviceName: abc-service
              servicePort: 80
          - path: /efg/?(.*)
            backend:
              serviceName: efg-service
              servicePort: 80

Теперь я могу получить доступ к своим API:

  • my.host.com/abc/ (следует отметить, что здесь требуется последний /, иначе будет ошибка 404)
  • my.host.com/abc/child
  • my.host.com/efg/
  • my.host.com/efg/child

Может быть как-то полезно для тех, кто не знаком с K8 сейчас или позже.

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