【问题标题】:UDP response issuesUDP 响应问题
【发布时间】:2016-04-30 12:56:56
【问题描述】:

我在 kubernetes 中遇到端口转发 UDP 流量的问题。我正在运行 coreos 裸机设置,过去只使用舰队来运行我的容器,因此这些容器可以正常工作,并且我的网络和端口转发设置正确。我可以手动运行容器并将端口转发给它,并且事情按预期工作,所以 kubernetes 和 UDP 似乎正在发生一些事情。我有多个无法正常工作的服务,但最简单的一个是这个 Mumble 服务器。这是从复制控制器开始的设置。

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 发送和接收。环顾四周,我看到了其他关于 UDP 问题的报告,这些报告似乎与 Responses from kubernetes containers getting lostProblems on running a SIP application (UDP) on Kubernetes 相关。

有谁知道这里可能出了什么问题或解决方法?

【问题讨论】:

  • tcpdump 显示什么?首先要确认的是流量是否返回机器。
  • 另外,确切的 kubernetes 版本是什么?另外,这是用户空间代理(默认)还是 iptables 代理(需要启用)?
  • 我正在运行 CoreOS beta (899.5.0),它有 kubelet 版本 Kubernetes v1.1.2+3085895。我正在拉 hyperkube:v1.1.2 来运行代理。我已按照 CoreOS 设置说明进行操作,并假设我使用代理容器运行代理,但我确实看到了 iptables 转发规则。 stackoverflow.com/questions/34368093/… 有一个 tcpdump,但我也会尝试获取一个。
  • @TimHockin 抱歉,我花了这么长时间才回复您。我一直在挖掘 tcpdump 并进行调查,发现 mumble 的问题似乎在于它是否恰好落在我的主人身上。我也有我的主设置来运行作业,但我认为这不是一个坏主意,就是我做错了。如果在 kubernetes 中启动,我仍然无法让 homeworld 游戏服务器正常工作,但我看到流量在节点和容器内部进出。我对那里的问题感到困惑,但似乎不是数据包没有发出来。

标签: docker kubernetes coreos flannel


【解决方案1】:

如果您kubectl get svc,您应该会看到它打开了 UDP TCP 端口。在同一端口上同时支持 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

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2010-11-20
    • 2017-05-10
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多