kubernetes 部署没有正确地将多路复用端口应用到我的Pods上,

elcex8rz  于 6个月前  发布在  Kubernetes
关注(0)|答案(3)|浏览(58)

发生了什么?
我正在运行一个DNS服务器(dnsmasq)部署,它通过Traefik反向代理暴露在互联网上。DNS协议要求我在同一个端口上复用不同的协议,因为DNS查询可以以TCP或UDP协议到来。
在dnsmasq和Traefik部署中,我遇到了一个问题,即K8s API“ Gulp ”了其中一个复用的端口,从而使DNS服务器变得无用(因为TCP或UDP流量无法到达Pod)。
简而言之:
当我将此端口配置应用于容器时:

ports:
  - containerPort: 1053
    name: udp
    protocol: UDP
  - containerPort: 1053
    name: tcp
    protocol: TCP

实际上只有两个端口中的一个被应用(似乎随机选择其中哪个端口被应用)。

这个问题不是每次都能100%重现!在我的研究中,大约每5次尝试就会发生一次。我不知道必须满足哪些条件才能重现此问题。

我的当前解决方法是在初始应用Deployment后,使用kubectl/ArgoCD手动添加缺失的端口。这始终解决了问题,但对我来说不是一个可行的长期解决方案。

预期会发生什么?

我预期在第一个 kubectl apply 之后,两个协议都可以在同一端口上使用。

如何尽可能精确地重现它?

请记住,这个问题是随机发生的,你可能需要尝试几次才能重现它。
你可以通过执行以下命令来重现问题:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: multiplexed-port
  namespace: multiplexed-port
spec:
  replicas: 1
  selector:
    matchLabels:
      app: multiplexed-port
  template:
    metadata:
      labels:
        app: multiplexed-port
    spec:
      containers:
        - name: multiplexed-port
          image: busybox:latest
          command: ["sh", "-c", "echo 'Hello, World!' && sleep infinity"]
          ports:
            - containerPort: 1053
              name: udp
              protocol: UDP
            - containerPort: 1053
              name: tcp
              protocol: TCP

在将清单应用到集群后,运行 kubectl describe 以查看只有一个端口被应用。
我没有测试裸Pod或其他pod控制器,如 DaemonSetStatefulSet

还需要了解其他信息吗?

我使用ArgoCD(当前版本v2.9.6)管理我的部署。当其中一个复用的端口没有正确应用时,ArgoCD不会为我的部署显示OutOfSync状态,表明K8s API在这里工作不正常。
kubectl.kubernetes.io/last-applied-configuration 注解也显示两个端口都已应用,而当我运行 kubectl describe 时,只显示一个端口。

Kubernetes版本

$ kubectl version
Client Version: v1.29.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.27.9
WARNING: version difference between client (1.29) and server (1.27) exceeds the supported minor version skew of +/-1

云提供商

我们使用的是AKS集群,运行在AzureLinux上。

OS版本

我使用的是MacOS Sonoma(14.4)。
集群始终运行在最新的AzureLinux版本上。

安装工具

容器运行时(CRI)及其版本(如果适用)

相关插件(CNI,CSI等)及其版本(如果适用)

hl0ma9xz

hl0ma9xz1#

这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用triage/accepted标签并提供进一步的指导来接受它。
组织成员可以通过在评论中写入/triage accepted来添加triage/accepted标签。
有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes/test-infra仓库提出一个问题。

atmip9wb

atmip9wb3#

Kubernetes项目目前缺乏足够的贡献者来充分应对所有问题。
此机器人根据以下规则对未分类的问题进行分级处理:

  • lifecycle/stale应用后的90天不活动后,将应用lifecycle/stale
  • lifecycle/stale应用后的30天不活动后,将应用lifecycle/rotten
  • lifecycle/rotten应用后的30天不活动后,该问题将被关闭

您可以:

  • 将此问题标记为新鲜的/remove-lifecycle stale
  • 使用/close关闭此问题
  • 提供帮助,请使用Issue Triage

请将反馈发送至sig-contributor-experience@kubernetes/community
/lifecycle stale

相关问题