我已经使用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
答案 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添加一个标志来执行此操作。
谢谢!