Назад | Перейти на главную страницу

Loadbalancer targetPort не перенаправляет на hostPort демона, если порт не совпадает с hostPort

У меня следующая установка:

Балансировщик нагрузки указывает на входящий контроллер как на демонсет, работающий в кластере gcp-kubernetes, как показано в примере ниже:

apiVersion: v1
kind: Service
metadata:
  name: lb
  namespace: ns
  labels:
    app: lb
spec:
  type: LoadBalancer
  loadBalancerIP: x.x.x.x
  ports:
      - name: test1
        port: 445
        targetPort: test

      - name: test2
        port: 444
        targetPort: test
  selector:
    k8s-app: ingress-controller

Вот демон для входящего контроллера

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ingress-controller
  namespace: ns
  labels:
    k8s-app: ingress-controller
spec:
  selector:
    matchLabels:
      app: ingress-controller
  template:
    metadata:
      labels:
        app: ingress-controller
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: ingress-controller
          image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.15
          resources:
            requests:
              memory: "0.3Gi"
              cpu: "0.3"
            limits:
              memory: "0.5Gi"
              cpu: "0.5"
          readinessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
          livenessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            timeoutSeconds: 1
          ports:
            - name: test
              hostPort: 444
              containerPort: 443
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          args:
            - /nginx-ingress-controller
            - --ingress-class=public
            - --default-backend-service=ns/default-http-backend
            - --v=2

Затем входной сигнал указывает на простой nginx для тестовых целей.

Теперь я столкнулся со следующей проблемой:

Когда я вызываю домен для балансировщика нагрузки с портом 444 (test.mydomain.com:444), я успешно получаю индексную страницу nginx-default.

Однако, когда я вызываю домен с портом 445 (test.mydomain.com:445), я ожидал бы получить тот же результат, поскольку целевой порт блока балансировки нагрузки такой же, но он не работает. .

Похоже, что port и hostPort должны соответствовать.

Похоже, что targetPort в балансировщике нагрузки не работает должным образом, он как-то только пересылает portот фунта до hostPort входного контроллера.

Я уже пробовал несколько вещей, например настройку ingress-контроллера без hostPort, используйте совершенно другой порт для hostPort и т.д., но я так и не получил ожидаемого результата. Я видел в Интернете рабочие примеры без использования hostPortоднако они никогда не использовали наборы демонов, а только развертывания.

Как мне настроить loadbalancer и ingress-controller-daemonset для получения разных маршрутов портов к одному и тому же результату?

Если потребуется дополнительная информация, дайте мне знать!