Ingress не может разрешить NodePort IP в GKE - PullRequest
0 голосов
/ 31 января 2019

У меня есть вход, определенный как:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foo-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: zaz-address
    kubernetes.io/ingress.allow-http: "false"
    ingress.gcp.kubernetes.io/pre-shared-cert: foo-bar-com

spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /zaz/*
        backend:
          serviceName: zaz-service
          servicePort: 8080

Тогда услуга zap-service является nodeport, определяемой как:

apiVersion: v1
kind: Service
metadata:
  name: zaz-service
  namespace: default
spec:
  clusterIP: 10.27.255.88
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32455
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: zap
  sessionAffinity: None
  type: NodePort

nodeport успешно выбираетдве стручки позади этого, служащие моему обслуживанию.В списке GKE я вижу, что у nodeport есть IP-адрес, который выглядит внутренним.

Когда я проверяю в том же интерфейсе ingress, он также выглядит нормально, но обслуживает ноль пакетов..

Когда я описываю ingress с другой стороны, я вижу:

Rules:
  Host                                    Path  Backends
  ----                                    ----  --------
  foo.bar.com
                                          /zaz/*   zaz-service:8080 (<none>)

То, что ingress не может разрешить службу IP.Что я здесь не так делаю?Я не могу получить доступ к сервису через внешнее доменное имя, я получаю сообщение об ошибке 404.

Как мне сделать так, чтобы входное имя преобразовало доменное имя zaz-service в правильное IP, чтобы оно могло перенаправлять трафикесть

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Моя ошибка, как и ожидалось, заключалась в недостаточном чтении документации.

Порт, указанный в пути Ingress, является не механизмом пересылки, а фильтрующим.В моей голове было понятно, что он будет перенаправлять http(s) трафик на порт 8080, который является тем, где слушал Service позади, и Pod позади сервиса.

Реальность состояла в том, что он не будет направлять трафик, который не был портом 8080 к услуге.Чтобы сделать его чище, я изменил порт в Ingress с 8080 на 80, а в Service порт на передней панели тоже с 8080 на 80.

Теперь всезапросы, поступающие из Интернета, могут успешно достигать сервера.

0 голосов
/ 31 января 2019

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

spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /zaz
        backend:
          serviceName: zaz-service
          servicePort: 8080
...