同一后端上用于 HTTPS 的 GKE Ingress 和用于 TCP 的 LoadBalancer?

GKE Ingress for HTTPS and LoadBalancer for TCP on same backend?

用例是这样的: 我有一个 RabbitMQ 集群,带有基于 websocket 的 STOMP。 websocket 使用 SSL (wss:x.x.x.x)。我设置了一个 Ingress 来处理证书。它将流量转发到内部端口 15674。 RabbitMQ 还需要在端口 5672 上接受 TCP。

Ingress负载均衡器不做TCP,是L7。 Service LoadBalancer 不做 HTTPS,它是 L4。

是否可以设置 Ingress 和 Service LoadBalancer 指向相同的后端但不同的端口? 还有其他方法吗?

GKE Ingress 仅适用于 HTTP / HTTPS /“HTTP/2”(TLS) 流量,您可以创建一个 GKE TCP LB 指向您在不同端口上拥有的相同后端。

像这样:

apiVersion: "v1"
kind: "Service"
metadata:
  name: "l4-loadbalancer"
  namespace: "default"
  labels:
    app: "nginx"
spec:
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  selector:
    app: "nginx"
  type: "LoadBalancer"
  loadBalancerIP: ""

您也可以仅使用 GKE tcp 负载均衡器来处理所有这些,但缺点是您需要直接在后端处理您的 SSL 证书,如果您希望 GCP 处理这个,那么2 负载平衡器方法会更好。