2016-01-24 109 views
0

我遇到了kubernetes中端口转发UDP流量的问题。我正在运行一个coreos baremetal安装程序,过去只是使用舰队来运行我的容器,所以这些容器可以正常工作,我的网络和端口转发也可以正常安装。我可以手动运行容器和端口到它,事情按预期工作,所以它似乎与kubernetes和UDP有关。我有多个服务无法正常工作,但最简单的服务器就是这个笨蛋服务器。这是从复制控制器开始的设置。UDP响应问题

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: mumble-v0 
    labels: 
    app: mumble 
    version: v0 
spec: 
    replicas: 1 
    selector: 
    app: mumble 
    version: v0 
    template: 
    metadata: 
     labels: 
     app: mumble 
     version: v0 
    spec: 
     containers: 
     - name: mumble 
     image: coppit/mumble-server 
     imagePullPolicy: Always 
     resources: 
      limits: 
      cpu: 0.5 
      memory: 500Mi 
     ports: 
     - containerPort: 64738 
      name: mumble 
     - containerPort: 64738 
      name: mudp 
      protocol: UDP 

而服务本身:

apiVersion: v1 
kind: Service 
metadata: 
    name: mumble 
    labels: 
    app: mumble 
    kubernetes.io/name: "mumble" 
spec: 
    selector: 
    app: mumble 
    ports: 
    - name: mumble 
    port: 64738 
    - name: mumble-udp 
    port: 64738 
    protocol: UDP 
    externalIPs: ["10.0.1.19"] 

客户能够连接到服务,并看到服务器,但没有语音流量正确。这种语音流量通过UDP发送和接收。环顾四周,我看到似乎与Responses from kubernetes containers getting lostProblems on running a SIP application (UDP) on Kubernetes有关的UDP问题的其他报告。

有谁知道这里或错误可能会出现什么问题吗?

+0

什么呢tcpdump的节目?首先要确认的是流量是否能够返回到机器。 –

+0

另外,什么确切的kubernetes版本?另外,这是与用户空间代理(默认)或iptables之一(需要启用)? –

+0

我正在运行CoreOS beta(899.5.0),它有kubelet版本Kubernetes v1.1.2 + 3085895。我拉动hyperkube:v1.1.2来运行代理。我遵循CoreOS设置说明,我假设代理容器是运行代理,但我确实看到了转发的iptables规则。 http://stackoverflow.com/questions/34368093/responses-from-kubernetes-containers-getting-lost有一个tcpdump,但我会试图阻止一个。 –

回答

0

如果你kubectl get svc你应该看到它打开了TCP端口的UDP 。支持同一端口上的UDP和TCP的Kubernetes似乎是ongoing issue

如果更改了端口号,则会出现错误“无法使用混合协议创建外部负载均衡器”(请参阅​​related issue)。

你可以做的是使用相同的静态IP创建两个服务(应保留):

apiVersion: v1 
kind: Service 
metadata: 
    name: mumble-tcp 
    labels: 
    project: mumble 
spec: 
    type: LoadBalancer 
    loadBalancerIP: 10.10.10.10 
    ports: 
    - port: 64738 
    selector: 
    name: mumble 
    project: mumble 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: mumble-udp 
    labels: 
    project: mumble 
spec: 
    type: LoadBalancer 
    loadBalancerIP: 10.10.10.10 
    ports: 
    - port: 64738 
     protocol: UDP 
    selector: 
    name: mumble 
    project: mumble