如果端口与 hostPort 不同,则负载均衡器 targetPort 不会转发到守护进程集 hostPort

如果端口与 hostPort 不同,则负载均衡器 targetPort 不会转发到守护进程集 hostPort

我有以下设置:

负载均衡器以守护进程的形式指向入口控制器,在 gcp-kubernetes-cluster 中运行,如下例所示:

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)调用域时,我希望得到相同的结果,因为负载均衡器块的目标端口是相同的,但它不起作用。

如此看来,porthostPort必须匹配。

看起来,负载均衡器中的 targetPort 无法按预期工作,它以某种方式仅将portlb 转发到hostPort入口控制器。

我已经尝试了几种方法,例如不使用 来配置 ingress-controller hostPort,使用完全不同的端口hostPort等等,但始终无法获得预期的结果。我在网上看到过不使用 的可行示例hostPort,但它们从未使用守护进程集,而只使用部署。

我该如何配置负载均衡器和入口控制器守护进程集才能让不同的端口路由到相同的结果?

如果需要更多信息,请告诉我!

相关内容