GCP 别名 IP 不可访问
GCP Alias IP Not reachable
我有一个别名 IP 范围是 10.7.0.0/16
已配置具有辅助范围的 VPC 原生集群,因此我的 pods/service 可以具有别名 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 本身的别名范围的连接?
注释 cloud.google.com/neg: '{"ingress": true}'
用于 ClusterIP
,不适用于 NodePort
,这意味着该服务将以两种方式公开:
幕后将创建一个独立的 ClusterIP
,只能从位于 10.7.165.27
[=21= 的同一子网中的其他 pods 访问]
将在您的 GKE 节点子网
的端口 30891/tcp
中的所有 GKE 节点中创建转发规则 iptables
在您当前的情况下,注释将被接受但不会对其执行任何操作,即使您在幕后创建 ClusterIP
(点“1”),也不会进行生效,因为它不是设计的方式。
话虽如此,这里有多个路径。
a) 你可以就此打住,直接在端口 30891/tcp
与你的 GKE 节点通信,我只会将此作为最后的手段,因为我个人不喜欢处理随机(或手动)选择的端口,在较长的 运行 中可能会影响处理。
b) 您也可以直接与您的 GKE pod IP 地址通信(假设没有 GCP 防火墙规则阻止连接),我也不会使用它,因为 GKE pod IP 可能会在任何给定时间更改,因此请保持跟踪它需要一些手动工作来完成,如果你有多个 pods 提供相同的服务,你也不会有任何“平衡”。
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 和/或全局访问结合使用。
---
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
这是数据包流
我有一个别名 IP 范围是 10.7.0.0/16
已配置具有辅助范围的 VPC 原生集群,因此我的 pods/service 可以具有别名 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 本身的别名范围的连接?
注释 cloud.google.com/neg: '{"ingress": true}'
用于 ClusterIP
,不适用于 NodePort
,这意味着该服务将以两种方式公开:
幕后将创建一个独立的
ClusterIP
,只能从位于10.7.165.27
[=21= 的同一子网中的其他 pods 访问]将在您的 GKE 节点子网
的端口30891/tcp
中的所有 GKE 节点中创建转发规则iptables
在您当前的情况下,注释将被接受但不会对其执行任何操作,即使您在幕后创建 ClusterIP
(点“1”),也不会进行生效,因为它不是设计的方式。
话虽如此,这里有多个路径。
a) 你可以就此打住,直接在端口 30891/tcp
与你的 GKE 节点通信,我只会将此作为最后的手段,因为我个人不喜欢处理随机(或手动)选择的端口,在较长的 运行 中可能会影响处理。
b) 您也可以直接与您的 GKE pod IP 地址通信(假设没有 GCP 防火墙规则阻止连接),我也不会使用它,因为 GKE pod IP 可能会在任何给定时间更改,因此请保持跟踪它需要一些手动工作来完成,如果你有多个 pods 提供相同的服务,你也不会有任何“平衡”。
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 和/或全局访问结合使用。
---
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
这是数据包流