GCP 内部负载平衡器
GCP internal load balancer
我正在尝试从我在 GAE 中的项目访问 GKE 上的 elasticsearch 集群 - 灵活。由于我不需要外部负载平衡器,因此我遵循本指南:
https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing
GKE和GAE都部署在同一个region,但是调用elasticsearch集群一直超时。有没有人做过这件事并且可以分享一些技巧,将不胜感激!
我的 service.yaml
文件如下所示:
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
假设 GAE 应用程序和 GKE 集群位于同一区域,并且位于同一 VPC 网络中,我建议确保您已经创建了 Ingress allow firewall rules 并将其应用于 GKE 节点作为目标GAE 应用虚拟机作为来源。
记住进入 VM 被隐含的拒绝进入规则拒绝。因此,除非您创建 Ingress 允许防火墙规则,否则您将无法将数据包发送到任何 VM。要使用 Internal Load Balancing (ILB),客户端和后端 VM 必须位于同一位置:
- 地区
- VPC 网络
- 项目
为了避免其他人遇到类似情况,我将分享我无法从 GAE 连接到我的 GKE 应用程序的原因。 GAE 位于 europe-west 区域,而 GKE 位于 europe-west-4a 区域。我以为那会是同一个地区。但是将 GKE 区域更改为 europe-west-1b 有效。不是很明显,但是在阅读文档时,GAE 区域 europe-west 和 GKE 区域 europe-west-1b 都在比利时。
GCP 现在具有内部负载平衡器的 beta Global Access 功能,这将允许从同一网络内的任何区域访问内部负载平衡器。
这对您的情况也有帮助。如果两个服务使用内部 IP 地址暴露但位于不同区域。
更新
全局访问功能现已稳定(对于 GKE 1.16.x 及更高版本),可以通过以下方式启用将以下注释添加到您的服务中。
networking.gke.io/internal-load-balancer-allow-global-access: "true"
例如:下面的清单将使用内部 IP 地址创建您的 internalloadbalancerservice
LoadBalancer,并且可以访问该 IP来自同一 VPC 内的任何区域。
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
# Required to enable global access
networking.gke.io/internal-load-balancer-allow-global-access: "true"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
这适用于 GKE 1.16.x 及更高版本。对于较旧的 GKE 版本,您可以参考 this answer.
我正在尝试从我在 GAE 中的项目访问 GKE 上的 elasticsearch 集群 - 灵活。由于我不需要外部负载平衡器,因此我遵循本指南: https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing GKE和GAE都部署在同一个region,但是调用elasticsearch集群一直超时。有没有人做过这件事并且可以分享一些技巧,将不胜感激!
我的 service.yaml
文件如下所示:
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
假设 GAE 应用程序和 GKE 集群位于同一区域,并且位于同一 VPC 网络中,我建议确保您已经创建了 Ingress allow firewall rules 并将其应用于 GKE 节点作为目标GAE 应用虚拟机作为来源。
记住进入 VM 被隐含的拒绝进入规则拒绝。因此,除非您创建 Ingress 允许防火墙规则,否则您将无法将数据包发送到任何 VM。要使用 Internal Load Balancing (ILB),客户端和后端 VM 必须位于同一位置:
- 地区
- VPC 网络
- 项目
为了避免其他人遇到类似情况,我将分享我无法从 GAE 连接到我的 GKE 应用程序的原因。 GAE 位于 europe-west 区域,而 GKE 位于 europe-west-4a 区域。我以为那会是同一个地区。但是将 GKE 区域更改为 europe-west-1b 有效。不是很明显,但是在阅读文档时,GAE 区域 europe-west 和 GKE 区域 europe-west-1b 都在比利时。
GCP 现在具有内部负载平衡器的 beta Global Access 功能,这将允许从同一网络内的任何区域访问内部负载平衡器。
这对您的情况也有帮助。如果两个服务使用内部 IP 地址暴露但位于不同区域。
更新
全局访问功能现已稳定(对于 GKE 1.16.x 及更高版本),可以通过以下方式启用将以下注释添加到您的服务中。
networking.gke.io/internal-load-balancer-allow-global-access: "true"
例如:下面的清单将使用内部 IP 地址创建您的 internalloadbalancerservice
LoadBalancer,并且可以访问该 IP来自同一 VPC 内的任何区域。
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
# Required to enable global access
networking.gke.io/internal-load-balancer-allow-global-access: "true"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
这适用于 GKE 1.16.x 及更高版本。对于较旧的 GKE 版本,您可以参考 this answer.