在谷歌容器引擎上,我如何使用“ - 公共”ip“暴露”?

时间:2015-07-22 19:07:44

标签: google-compute-engine google-kubernetes-engine

我已经使用Google的Container Engine工具通过Kubernetes集群在GCE上部署了Docker容器。

设置'type':服务上的'LoadBalancer'不支持websockets。我想公开我自己的nginx服务以支持websockets,但是在kubernetes中为dns / service disco运行它。

我看到kubectl expose命令有--public-ip=个参数。关于如何设置ip赞赏的任何提示。

更新,尝试使用--dry-run -o yaml进行公开以传递affinity param:

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    name: tfe
  name: mytfe
spec:
  sessionAffinity: ClientIP
  ports:
  - name: default
    nodePort: 0
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    name: tfe
  type: LoadBalancer
status:
  loadBalancer: {}

它打开http很好,但我在ws GET上得到400(在POST得到200之后)

"GET /socket.io/?EIO=3&transport=polling&t=1437780794642-2313&sid=JuLWBlEy4Wjk3zHSAAH0 HTTP/1.1" 400

1 个答案:

答案 0 :(得分:1)

为什么它不支持网络套接字?这应该。您需要设置会话亲和力。

可悲的是,kubectl expose当前没有会话亲和力的标志(它应该)但是如果你运行kubectl expose --dry-run=true ...它将转储它将发送的API对象,然后你可以添加{ {1}}到" ClientIP"

然后运行service.spec.sessionAffinity它应该可以工作。如果它没有请来IRC或用repro提出github问题。

我提交了https://github.com/GoogleCloudPlatform/kubernetes/issues/11718,用于向kubectl添加一个标志来执行此操作。

谢谢!