kubernetes - Google 容器引擎中使用保留 IP 进行负载平衡

标签 kubernetes google-kubernetes-engine

我想在 Google 容器引擎上托管一个网站(简单的 nginx+php-fpm)。我构建了一个控制 nginx 和 php-fpm pod 的复制 Controller 。我还构建了一个可以公开该站点的服务。

如何将我的服务链接到公共(public)(和保留)IP 地址,以便网络服务器看到客户端 IP 地址?

我尝试创建一个入口。它通过额外的 http header 提供客户端 IP。不幸的是,ingress 尚不支持保留 IP:

kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.org
    http:
      paths:
      - backend:
          serviceName: example-web
         servicePort: 80
        path: /

我还尝试使用保留的 IP 创建服务。这给了我一个公共(public) IP 地址,但我认为客户端 IP 丢失了:

apiVersion: v1
kind: Service
metadata:
  name: 'example-web'
spec:
  selector:
    app: example-web
  ports:
    - port: 80
      targetPort: 80
  loadBalancerIP: "10.10.10.10"
  type: LoadBalancer

我会手动设置 HTTP 负载均衡器,但我没有找到将集群 IP 配置为负载均衡器后端的方法。

对我来说,这似乎是一个非常基本的用例,并且阻碍了在生产中使用容器引擎。我缺少什么?我哪里错了?

最佳答案

当您在 google-container-engine 中运行时,您可以设置 Compute Engine HTTP Load Balancer为您的静态IP。 Target proxy将为您添加 X-Forwarded- header 。

使用类型 NodePort 设置您的 kubernetes 服务并添加一个 nodePort 字段。这样,无论 pod 在哪里运行,都可以通过每个节点 IP 地址上的 kubernetes-proxy 访问 nodePort:

apiVersion: v1
kind: Service
metadata:
 name: 'example-web'
spec:
 selector:
   app: example-web
 ports:
   - nodePort: 30080
     port: 80
     targetPort: 80
 type: NodePort

创建 backend service在端口 30080 上为您的实例组(节点)进行 HTTP 运行状况检查。

关于kubernetes - Google 容器引擎中使用保留 IP 进行负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34507440/

相关文章:

动态 URL 的 Kubernetes 入口

kubernetes - Kubernetes 内的代理出站/出站流量

kubernetes - 如何仅在 kubernetes rbac 中控制对 pod/exec 的访问,而无需创建绑定(bind)的 pod?

docker - 如何使用 NGINX 入口 Controller 从 Cloudflare 恢复原始客户端 IP

docker - Kubernetes/Docker 的 HTTP(S) 负载均衡

从 Kubernetes pod 中的 Google Cloud Endpoints 登录到 Stackdriver

kubernetes - 如何查找 Pod 崩溃的原因?

google-compute-engine - 设置多个入口、服务、部署资源和 Cloud DNS

kubernetes - Kubernetes 是否允许并使用多个 imagePullSecrets 从私有(private)注册表中提取图像?

angular - Kubernetes:ERR_NAME_NOT_RESOLVED