【问题标题】:GKE LoadBalancer Static IPGKE LoadBalancer 静态 IP
【发布时间】:2020-04-23 14:21:43
【问题描述】:

我在集群的同一区域创建了一个区域静态 IP,并尝试将它与 LoadBalancer 一起使用:

---
apiVersion: v1
kind: Service
metadata:
  name: ambassador
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
   - port: 80
     targetPort: 8080
  selector:
    service: ambassador
  loadBalancerIP: "x.x.x.x"

但是,我不知道为什么会出现此错误:

Error creating load balancer (will retry): failed to ensure load balancer for service default/ambassador: requested ip "x.x.x.x" is neither static nor assigned to the LB   

编辑:问题已解决,但..

当我创建静态 IP 地址时,我使用了:

gcloud compute addresses create regional-ip --region  europe-west1

我将此地址用于服务。 它没有像我说的那样工作。

但是,当我使用 Web 控制台创建外部静态区域 IP 时,该 IP 与我的服务正常工作,并且连接没有问题。

【问题讨论】:

  • 我为你调整了答案
  • 听起来像是一个错误。该命令应产生与您通过 UI 获得的相同类型的 IP。与命令行相比,UI 进行的 API 调用略有不同,或者后端的某些东西确实很不稳定。我建议在公共问题跟踪器上打开一个问题
  • 我认为这也是一个错误。

标签: kubernetes load-balancing google-kubernetes-engine gke-networking


【解决方案1】:

我敢打赌,源 IP 服务不会暴露。正如官方文档所说:

从 Kubernetes 1.5 开始,发送到 Type=LoadBalancer 的服务的数据包默认经过源 NAT,因为处于就绪状态的所有可调度 Kubernetes 节点都符合负载平衡流量的条件。因此,如果数据包到达没有端点的节点,系统会将其代理到有端点的节点,将数据包上的源 IP 替换为节点的 IP(如上一节所述)。

试试这个命令把源IP服务暴露给负载均衡器:

kubectl expose deployment <source-ip-app> --name=loadbalancer --port=80 --target-port=8080 --type=LoadBalancer

在此页面上,您将找到更多指导和一些用于健全性检查的诊断命令。

https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-type-loadbalancer

【讨论】:

  • "x.x.x.x" 试图混淆我的 IP 地址 :) 我使用了真实 IP。
  • 我不明白这个命令和我在 YAML 中使用的命令之间的区别。除了您的命令没有为负载均衡器提供任何静态 IP 之外。另外,在 GKE 中,我认为您可以简单地将 service.spec.healthCheckNodePort 从“Local”更改为“Cluster”。
  • 大部分平台都可以改成集群。我以为你想要本地。
猜你喜欢
  • 2021-02-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2019-01-13
相关资源
最近更新 更多