0

TL;DR 在 GKE 私有集群中,我无法使用内部/私有 IP 公开服务。

我们的部署由大约 20 个微服务和 4 个单体组成,目前完全在 GoogleCloud 上的虚拟机上运行。我正在尝试将此基础架构移至 GKE。该项目的第一步是构建一个私有 GKE 集群(即没有任何公共 IP)作为我们的暂存的替代。由于这是暂存的,我需要在内部公开所有微服务端点以及单体端点以用于调试目的(意味着,仅对那些连接到 VPC 的端点),这就是我卡住的地方。我尝试了两种方法:

  1. 在每个服务和单体之前放置一个内部负载均衡器 (ILB)。例子:
apiVersion: v1
kind: Service
metadata:
  name: session
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: session
    type: ms
spec:
  type: LoadBalancer
  selector:
    app: session
  ports:
  - name: grpc
    port: 80
    targetPort: 80
    protocol: TCP

在此处输入图像描述

这可行,但有严重的限制。ILB 创建转发规则,GCP限制每个网络 75 条转发规则。这意味着我们不能在一个网络中构建超过 3 个集群。我们不能接受。

  1. 一个。我尝试在所有服务前面放置一个入口控制器,它总是使用公共 IP 公开整个集群 - 绝对禁止。
apiVersion: extensions/v1beta1
kind: Ingress
hostNetwork: true
metadata:
  name: ingress-ms-lb
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: gs03
    http:
      paths:
      - path: /autodelivery/*
        backend:
          serviceName: autodelivery
          servicePort: 80
      - path: /session/*
        backend:
          serviceName: session
          servicePort: 80

湾。我尝试使用 nginx 入口控制器,但最终根本没有 ip。


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-ms-lb
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    # cloud.google.com/load-balancer-type: "Internal"
    nginx.ingress.kubernetes.io/ingress.class: nginx
    kubernetes.io/ingress.class: "nginx"
    # nginx.ingress.kubernetes.io/whitelist-source-range: 10.100.0.0/16, 10.110.0.0/16
spec:
  rules:
  - host: svclb
    http:
      paths:
      - path: /autodelivery/*
        backend:
          serviceName: autodelivery
          servicePort: 80
      - path: /session/*
        backend:
          serviceName: session
          servicePort: 80

第三个选项是配置防火墙规则,这将切断对公共 IP 的任何访问。考虑到安全问题,这在内部被拒绝了。

我被困在这个阶段,需要一些指示才能继续前进。请帮忙

4

1 回答 1

0

我可以从您附加的屏幕截图中看到您的 GKE 集群是一个私有集群。

由于您希望从同一 VPC 网络中的所有资源访问 GKE 集群内的服务和应用程序,因此我建议您使用 NodePort [1]。

[1] https://cloud.google.com/kubernetes-engine/docs/concepts/service#service_of_type_nodeport

于 2020-02-27T10:28:06.460 回答