在 google 容器引擎上,如何将 "expose" 与“--public-ip”一起使用?

on google container engine, how do i use "expose" with "--public-ip"?

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

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

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

更新,尝试使用 --dry-运行 -o yaml 进行公开以传递关联参数:

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

为什么它不支持网络套接字?这应该。您需要将会话关联设置为开启。

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

然后 运行 kubectl create -f <file> 应该可以。如果没有,请访问 IRC 或提交一个 github issue with a repro。

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

谢谢!