2016-01-24 78 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