使用Google容器引擎中的保留IP进行负载均衡

时间:2015-12-29 08:39:14

标签: kubernetes google-kubernetes-engine

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

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

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

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

我还尝试使用保留的IP创建服务。这给了我一个公共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 Loadbalancer,但我没有找到一种方法将群集IP配置为负载均衡器的后端。

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

1 个答案:

答案 0 :(得分:3)

当您在google-container-engine中运行时,您可以为静态IP设置Compute Engine HTTP Load BalancerTarget proxy会为您添加X-Forwarded-标题。

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

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

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