从另一个GKE专用集群访问私有GKE集群中的节点端口服务

时间:2020-03-26 00:57:53

标签: google-kubernetes-engine firewall

我正在使用Google Cloud,并且有两个GKE私有集群。

其中一个包含一些作为nodePort安装的服务。另一个集群需要连接到该集群并访问公开的服务。

公开服务的集群只有一个具有私有IP的节点。我可以使用此私有IP从另一个群集成功ping通此节点。

但是我如何获得服务?

我还尝试配置一些防火墙规则,但没有成功。

1 个答案:

答案 0 :(得分:2)

请看下面的示例,该示例显示了如何在两个私有GKE集群之间建立与服务(NodePort)的连接:

此示例将使用两个GKE群集:

  • gke-private-cluster-main-这将是具有简单hello-app
  • 的集群
  • gke-private-cluster-europe-该集群将能够与主集群通信

为简化起见,所有群集都只有一个节点。

gke-private-cluster-main上创建部署和服务

下面是hello-app的一个简单示例,该服务将在端口hello-app上公开30051

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
      version: 1.0.0
  replicas: 3
  template:
    metadata:
      labels:
        app: hello
        version: 1.0.0
    spec:
      containers:
      - name: hello
        image: "gcr.io/google-samples/hello-app:1.0"
        env:
        - name: "PORT"
          value: "50001"
---
apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  selector:
    app: hello
  ports:
    - name: hello-port
      port: 50001
      targetPort: 50001
      nodePort: 30051
  type: NodePort

应用它并检查产生此Pod的节点的内部 IP地址。您可以使用以下任一方法进行检查:

  • GCP -> Compute Engine -> VM Instances
  • kubectl get nodes -o wide

在我的情况下是10.156.0.2

尝试从gke-private-cluster-europe来访问它

您可以SSH到gke-private-cluster-europe的节点,然后尝试从该节点调用命令: curl 10.156.0.2:30051。您应该能够与此服务进行通信并获得如下输出:

Hello, world!
Version: 1.0.0
Hostname: hello-5d79ccdb55-vrrbs

要从广告连播内部检查连通性,您需要一个已内置curl的图像。互联网是各种令人敬畏的事物的聚集地,实际上,其中存在可以卷曲的图像。您可以在YAML以下生成卷曲的豆荚:

apiVersion: v1
kind: Pod
metadata:
  name: curl
  namespace: default
spec:
  containers:
  - image: curlimages/curl
    command:
      - sleep
      - "infinity"
    imagePullPolicy: IfNotPresent
    name: curl
  restartPolicy: Always

YAML以上应用后,您可以 exec 进入窗格,并使用以下命令检查自己:

  • $ kubectl exec -it curl -- /bin/sh
  • $ curl 10.156.0.2:30051

集群内部的输出将如下所示:

curl: (28) Failed to connect to 10.156.0.2 port 30051: Operation timed out

它适用于节点,但不适用于Pod。

允许流量:

要允许上述网络连接,您将需要:

  • 打开Google Cloud Platform
    • 检查gke-private-cluster-main节点的网络标记
      • 转到Compute Engine
      • 找到gke-private-cluster-main的节点
      • 单击以获取更多详细信息
      • 复制网络标签,其外观应类似于:gke-gke-private-cluster-main-80fe50b2-node
    • 检查gke-private-cluster-europe pod地址范围
      • 转到Kubernetes Engine
      • 找到您的gke-private-cluster-europe
      • 单击以获取更多详细信息
      • 复制窗格地址范围,其外观应类似于:10.24.0.0/14

复制网络标签和Pod范围后,您可以创建防火墙规则。请转到:

VPC Network -> Firewall rules -> Create a firewall rule

Firewall rule

请具体看一下使用网络标签和吊舱范围ip的部件,因为它们对您而言会有所不同。

应用它,然后再次检查gke-private-cluster-europe中的窗格是否可以访问10.156.0.2:30051

它应该为您提供以下输出:

Hello, world!
Version: 1.0.0
Hostname: hello-5d79ccdb55-6s8xh

如果您有任何疑问,请告诉我。