仅通过内部IP在(GKE)Kubernetes中公开服务

时间:2020-02-25 23:59:48

标签: kubernetes google-kubernetes-engine kubernetes-ingress gke-networking

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

我们的部署由大约20个微服务和4个整体组成,目前完全在GoogleCloud的VM上运行。我正在尝试将此基础架构移至GKE。该项目的第一步是建立一个私有GKE集群(即没有任何公共IP)来代替我们的阶段。在此阶段中,我需要在内部公开所有微服务端点以及整体端点以进行调试(意味着,仅适用于连接到VPC的端点),这就是我遇到的问题。我尝试了2种方法:

  1. 在每个服务和整体前面放置一个内部负载平衡器(ILB)。示例:
import pandas as pd

df = pd.DataFrame({'NO': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'f', 'f'], 'CODE': ['1', '1', '1', '1', '4', '1', '4', '1', '4', '4', '1', '4', '1']})

Out[1]: 
   NO CODE
0   a    1
1   a    1
2   b    1
3   b    1
4   c    4
5   c    1
6   d    4
7   d    1
8   e    4
9   e    4
10  e    1
11  f    4
12  f    1

enter image description here

这是有效的,尽管有严格的限制。 ILB创建转发规则,并且 GCP的limitation为每个网络75个转发规则。这意味着我们在一个网络中不能建立超过3个集群。不被我们接受。

  1. a。我尝试在所有服务的前面放置一个入口控制器,这始终向整个群集公开公共IP-绝对禁止。
NO CODE
c  4
c  1
d  4
d  1
e  4
e  4
e  1
f  4
f  1

b。我尝试使用一个Nginx入口控制器,该控制器最终根本没有IP。

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

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

我停留在这个阶段,需要一些指针才能继续前进。请帮忙

1 个答案:

答案 0 :(得分:0)

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

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

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