Mir*_*iro 7 kubernetes google-kubernetes-engine google-cloud-internal-load-balancer
我需要从另一个GCP区域访问运行在Internal Load Balancer上的GKE Nginx Ingress服务上运行的内部应用程序。
我完全知道,无法使用直接的Google联网,这是一个巨大的限制(GCP功能请求)。
可以通过AWS的VPN隧道很好地访问Internal Load Balancer,但是我不确定在同一网络下的GCP区域之间创建这样的隧道是一个好主意。
解决方法受到欢迎!
在 GCP 的发行说明中,指出:
全局访问是内部负载均衡器服务的可选参数,它允许来自您 VPC 中任何区域的客户端访问内部 TCP/UDP 负载均衡器 IP 地址。
使用以下注释为每个服务启用全局访问:
networking.gke.io/internal-load-balancer-allow-global-access: "true"。
apiVersion: v1
kind: Service
metadata:
name: ilb-global
annotations:
# Required to assign internal IP address
cloud.google.com/load-balancer-type: "Internal"
# Required to enable global access
networking.gke.io/internal-load-balancer-allow-global-access: "true"
labels:
app: hello
spec:
type: LoadBalancer
selector:
app: hello
ports:
- port: 80
targetPort: 8080
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
从位于不同区域的 VM 访问内部负载平衡器 IP 将不起作用。但是,这帮助我,使内部负载平衡器全球。
我们知道内部负载均衡器只不过是一个转发规则,我们可以使用gcloud命令来启用全局访问。
首先使用kubectl获取负载均衡器的内部 IP 地址并保存其 IP,如下所示:
# COMMAND:
kubectl get services/ilb-global
# OUTPUT:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ilb-global LoadBalancer 10.0.12.12 10.123.4.5 80:32400/TCP 18m
Run Code Online (Sandbox Code Playgroud)
请注意“EXTERNAL-IP”的值,或者只需运行以下命令以使其更简单:
# COMMAND:
kubectl get service/ilb-global \
-o jsonpath='{.status.loadBalancer.ingress[].ip}'
# OUTPUT:
10.123.4.5
Run Code Online (Sandbox Code Playgroud)
GCP 为为此负载均衡器创建的转发规则提供一个随机生成的 ID。如果您有多个转发规则,请使用以下命令找出您刚刚创建的内部负载均衡器:
# COMMAND:
gcloud compute forwarding-rules list | grep 10.123.4.5
# OUTPUT
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
a26cmodifiedb3f8252484ed9d0192 asia-south1 10.123.4.5 TCP asia-south1/backendServices/a26cmodified44904b3f8252484ed9d019
Run Code Online (Sandbox Code Playgroud)
注意:如果您不在 Linux 上工作或未安装 grep,只需运行gcloud compute forwarding-rules list并手动查找具有我们正在寻找的 IP 地址的转发规则。
请注意转发规则的名称并运行以下命令以使用--allow-global-access更新转发规则(请记住添加beta,因为它仍然是 beta 功能):
# COMMAND:
gcloud beta compute forwarding-rules update a26cmodified904b3f8252484ed9d0192 \
--region asia-south1 --allow-global-access
# OUTPUT:
Updated [https://www.googleapis.com/compute/beta/projects/PROJECT/regions/REGION/forwardingRules/a26hehemodifiedhehe490252484ed9d0192].
Run Code Online (Sandbox Code Playgroud)
它已经完成了。现在,您可以从任何区域(但相同的VPC 网络)中的任何实例访问此内部 IP ( 10.123.4.5 )。
小智 -2
首先,请注意,从本地位置连接任何 GCP 资源(在本例中为 GKE 集群)的唯一方法是通过 Cloud Interconnect 或 VPN 设置,实际上它们必须是同一地域、VPC之间能够互通。
\n\n话虽如此,我发现您\xe2\x80\x99不喜欢在同一 VPC 下执行此操作,因此您的场景的解决方法可能是:
\n\n创建LoadBalancer 类型的服务,以便可以通过公开此服务通过外部(公共)IP 访问您的集群。例如,如果您担心安全性,可以使用Istio来强制执行访问策略。
或者,使用Ingress创建HTTP(S) 负载平衡,以便可以通过其外部(公共)IP 访问您的集群。同样,出于安全目的,您可以使用GCP Cloud Armor,它实际上迄今为止仅适用于 HTTP(S) 负载平衡。
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |