【问题标题】:Loadbalancing with reserved IPs in Google Container Engine在 Google Container Engine 中使用保留 IP 进行负载平衡
【发布时间】:2016-04-03 02:59:12
【问题描述】:

我想在 Google Container Engine 上托管一个网站(简单的 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 负载平衡器,但我没有找到将集群 IP 配置为负载平衡器后端的方法。

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

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

    使用 NodePort 类型设置您的 kubernetes 服务并添加 nodePort 字段。这样nodePort 就可以通过每个节点 IP 地址上的 kubernetes-proxy 访问,而不管 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

    【讨论】:

    • 刚刚被告知入口控制器将在离开测试版之前分配静态 ips。
    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多