我需要从另一个GCP区域访问运行在GKE Nginx入口服务上的内部应用程序,该服务运行在内部负载均衡器上。
我完全知道,直接使用谷歌网络是不可能的,这是一个巨大的限制(GCP功能请求)。
通过AWS的VPN隧道可以很好地访问内部负载平衡器,但我不确定在同一网络下的GCP区域之间创建这样的隧道是一个好主意。
欢迎变通方法!
首先,请注意,从本地位置连接任何GCP资源(在本例中是您的GKE群集)的唯一方法是通过云互连或VPN设置,实际上它们必须位于同一区域和VPC中才能相互通信。
话虽如此,我知道您不喜欢在同一VPC下这样做,因此您的场景的解决方法可以是:
>
创建LoadBalancer类型的服务,以便通过公开此服务可以通过和外部(公共)IP访问您的集群。例如,如果您担心安全性,您可以使用Istio来强制执行访问策略。
或者,使用Inete创建HTTP(S)负载平衡,以便可以通过其外部(公共)IP访问您的集群。同样,出于安全目的,您可以使用GCP Cloud Armor,它实际上迄今为止仅适用于HTTP(S)负载平衡。
另一种可能的方法是在GKE集群所在区域的计算引擎上实现ngnix反向器代理服务器,并使用计算引擎实例的内部IP与GKE的服务进行通信。
在GCP的发行说明中,指出:
全局访问是内部负载平衡器服务的可选参数,允许VPC中任何区域的客户端访问内部TCP/UDP负载平衡器IP地址。
使用以下注释为每个服务启用全局访问:
网络。吉凯恩。io/内部负载平衡器允许全局访问:“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
从位于不同区域的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
请注意“EXTERNAL-IP”的值,或者只需运行以下命令即可使其更加简单:
# COMMAND:
kubectl get service/ilb-global \
-o jsonpath='{.status.loadBalancer.ingress[].ip}'
# OUTPUT:
10.123.4.5
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
注意:如果您不在Linux上工作或未安装grep,只需运行云计算转发规则列表,然后手动查找具有我们要查找的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].
一切都结束了。现在,您可以从任何地区的任何实例访问此内部IP(10.123.4.5)(但VPC网络相同)。
我试图在AWS EKS集群中托管以下(部署前端)Kubernetes部署,在部署部署并创建服务和入口之后,所有的东西都成功地部署和创建了,但是当我试图从外部访问负载平衡器DNS时,这个负载平衡器是不可访问的。有人能指出原因吗? **下面的代码(deployment-2048)正在工作,负载均衡器是可访问的,但在(部署前端)**的情况下是不可访问的。
我在GCP中建立了自己的Elasticsearch集群。群集已启动并运行良好。 集群包含两个客户端节点,我可以使用它们在内部访问并通过运行状况检查http://IP:9200/和
我成功地基于外部负载平衡器设置了自动缩放,但我没有找到一种方法来对内部负载平衡器进行同样的设置。 是否支持此功能,如何根据内部负载均衡器自动扩展我的实例组? 问题是,当您将实例组配置为按HTTP请求扩展时,您需要一个面向internet的HTTP负载平衡器,因此,可以是内部的UDP负载平衡器不适用于此。
我在GKE上有两个kubernetes集群:一个是处理与外部世界交互的公共集群,另一个是仅供内部使用的私有集群。 公共集群需要访问私有集群上的一些服务,我已经通过内部负载平衡器向公共集群的pod公开了这些服务。目前,我正在为负载平衡器指定要使用的内部IP地址,并将这些IP传递给公共POD,但我更希望负载平衡器可以选择任何可用的内部IP地址,并且我可以将其DNS名称传递给公共POD。 内部负载均衡器
我们在AWS VPC中有一个面向内部的应用程序负载平衡器。运行在公用子网中的web应用程序正在访问此文件。该web应用位于自定义域url后面,并使用SSL证书进行安全保护。由于API负载平衡器未应用SSL,因此从web app到API LB的通信失败。 是否可以在AWS中为面向内部的负载平衡器获取SSL证书?
通过添加节点来使集群的负载平衡。只要workder节点符合service的要求,service的task会被均匀的分配到不同的节点上。当限制service在指定类型的节点上运行时,例如指定节点CPU的个数或者内存的容量,节点如果没有达到这些指定的要求,task是不会在这样的节点上运行的。