0

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

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

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

更新,尝试使用 --dry-run -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

4

1 回答 1

1

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

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

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

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

谢谢!

于 2015-07-22T22:46:25.917 回答