0

我有一个别名 IP 范围是10.7.0.0/16

配置了具有辅助范围的 VPC 原生集群,因此我的 pod/服务可以具有别名 IP 范围

在 GKE 中,有一个使用别名 IP 范围的服务

❯ k get svc
NAME             TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
hasura-service   NodePort   10.7.165.27   <none>        80:30891/TCP   2d21h
---
apiVersion: v1
kind: Service
metadata:
  name: sura-service
  namespace: sura
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
spec:
  selector:
    app: sura
  ports:
  - port: 80
    targetPort: 8080
  type: NodePort

Project 中的其他实例无法与之通信10.7.165.27:80,这些实例位于同一子网中10.152.0.0/20

我是否需要配置其他任何东西才能使用连接 VPC 本身的别名范围?

4

2 回答 2

1

注释cloud.google.com/neg: '{"ingress": true}'是 for ClusterIP,而不是 for NodePort,这意味着所述服务将以两种方式公开:

  1. 在幕后将创建一个独立ClusterIP的,只能从同一子网中的其他 pod 访问10.7.165.27

  2. 将在所有 GKE 节点中在您的 GKE 节点子网iptables的端口中创建转发规则30891/tcp

在您当前的情况下,注释将被接受但不会对其做任何事情,即使您ClusterIP在幕后创建(点“1”)也不会生效,因为它不是原来的样子专为。

话虽如此,您在这里有多个路径。

a)您可以保留它,并直接在 port 与您的 GKE 节点通信30891/tcp,我只会将此作为最后的手段,因为我个人不喜欢处理随机(或手动)选择的端口,从长远来看可能会影响处理。

b)您也可以直接与您的 GKE pod IP 地址通信(假设没有 GCP 防火墙规则阻止连接),我也不会使用它,因为 GKE pod IP 可能会在任何给定时间更改,因此跟踪它需要一些手动工作,如果您有多个提供相同服务的 Pod,您也不会有任何“平衡”。

c) 您可以实现以下 ClusterIP yaml 文件,而不是当前的:

apiVersion: "v1"
kind: "Service"
metadata:
  name: "sura-service"
  annotations:
    cloud.google.com/neg: '{"exposed_ports": {"80":{}}}'
  namespace: "sura"
spec:
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 8080
  selector:
    app: "sura"
  type: "ClusterIP"

这将创建一个 NEG,您需要将您的连接指向将要创建的 GCP NEG 内部 IP,如果您出于任何原因需要使用 GCP NEG,我会亲自使用它。

d) 如果您不需要像这样使用 NEG,您还可以部署内部 TCP 负载均衡器:

apiVersion: "v1"
kind: "Service"
metadata:
  name: "sura-l4"
  namespace: "sura"
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 8080
  selector:
    app: "sura"
  type: "LoadBalancer"
  loadBalancerIP: ""

根据您要实现的目标,您可以将其与 NEG 和/或 Global Access 结合使用。

于 2021-01-21T20:45:24.193 回答
0
---
apiVersion: v1
kind: Service
metadata:
  name: sura-service
  namespace: sura
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
spec:
  selector:
    app: sura
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 8080
  type: ClusterIP

这将创建一个具有辅助别名范围的服务,但仍无法从 VPC 访问。

使用仅代理子网创建内部负载均衡器 - https://cloud.google.com/load-balancing/docs/l7-internal/proxy-only-subnets

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: sura-ingress
  namespace: sura
  annotations:
    kubernetes.io/ingress.class: "gce-internal"
spec:
  backend:
    serviceName: sura-service
    servicePort: 80

这是数据包流

在此处输入图像描述

于 2021-01-22T07:26:15.817 回答