Ingress- Nginx -Controller не удалось найти второй сервис, развернутый на Google Cloud Platform - PullRequest
0 голосов
/ 15 марта 2020

Я развернул на GCP следующие 2 службы (встроенные Java):

  • mply6 (служба 1, прослушивающая порт 8080 внешний от GCP), соответствующий URL: http://example.com/path1

  • gami6 (служба 2, прослушивание порта 8081 вне GCP), соответствующая URL: http://example.com/path2

YAML для развертывания и предоставления службы 1:

kind: Service
apiVersion: v1
metadata:
  name: mply6
spec:
  selector: 
      app: mply6
  ports:
     - protocol: "TCP"
       port:  80
       targetPort:  8080
  type: LoadBalancer
  loadBalancerIP: "35.223.241.9"

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mply6
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: mply6
  template:
    metadata:
      labels:
        app: mply6
    spec:
      containers:
      - name: mply6
        image: gcr.io/mply6-271000/mply6:latest
        ports:
        - containerPort: 8080

YAML для развертывания и предоставления службы 2:

kind: Service
apiVersion: v1
metadata:
  name: gami6
spec:
  selector: 
      app: gmai6
  ports:
     - protocol: "TCP"
       port:  81
       targetPort:  8081
  type: LoadBalancer
  loadBalancerIP: "35.223.241.9"

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gami6
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: gami6
  template:
    metadata:
      labels:
        app: gami6
    spec:
      containers:
      - name: gami6
        image: gcr.io/mply6-271000/gami6:latest
        ports:
        - containerPort: 8081

И, yaml для создания ресурса Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "35.223.241.9"
spec:
  rules:
  - http:
      paths:
      - path: /path1
        backend:
          serviceName: mply6
          servicePort: 80
      - path: /path2
        backend:
          serviceName: gami6
          servicePort: 81

Кроме того, результат 'kubectl description ingress basi c -ingress':

Name:             basic-ingress
Namespace:        default
Address:          35.244.199.199
Default backend:  default-http-backend:80 (10.60.1.4:8080)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *
        /multiplications/random   mply6:80 (10.60.0.32:8080)
        /results                  mply6:80 (10.60.0.32:8080)
        /leaders                  gami6:81 (10.60.0.32:8081)
        /stats                    gami6:81 (10.60.0.32:8081)
Annotations:
  kubernetes.io/ingress.global-static-ip-name:  35.223.241.9
Events:
  Type     Reason     Age                   From                      Message
  ----     ------     ----                  ----                      -------
  Normal   CREATE     35m                   nginx-ingress-controller  Ingress default/basic-ingress
  Warning  Translate  21m                   loadbalancer-controller   error while evaluating the ingress spec: could not find service "default/gami6"; could not find service"
default/gami6"
  Warning  Translate  6m17s (x34 over 77m)  loadbalancer-controller   error while evaluating the ingress spec: could not find port "8081" in service "default/gami6"; could no
t find port "8081" in service "default/gami6"
  Normal   CREATE     44s (x1153 over 22h)  loadbalancer-controller   ip: 35.244.199.199
  Normal   UPDATE     7s (x13 over 35m)     nginx-ingress-controller  Ingress default/basic-ingress

В основном я ожидаю, что когда Я даю URL 'http://example.com/path2', Ingress- Nginx -Controller найдет 2-й сервис 'gami6', но почему вышеупомянутое сообщение об ошибке: не удалось найти сервис "default / gami6" ? (http://example.com/path1 можно найти без проблем в случае)

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Во-первых, я заметил опечатку второго сервиса yaml:

spe c: селектор: app: gmai6 <- это должно быть gami6? </p>

Чтобы использовать Google Ingress с более чем одним бэкэндом вам может понадобиться использовать «NodePort» вместо «LoadBalancer» для предоставления сервисов. Вы можете найти об этом в этой документации: https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#multiple_backend_services

Если вы хотите использовать nginx входной контроллер, вы должны следовать этому: guide: https://cloud.google.com/community/tutorials/nginx-ingress-gke

0 голосов
/ 17 марта 2020

Я не могу добавить какие-либо замечания по поводу развертывания, которое вы указали выше. Однако это развертывание очень похоже на документацию http-балансировщика

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

...