【问题标题】:Kubernetes Pod/container networkingKubernetes Pod/容器网络
【发布时间】:2021-02-07 09:15:49
【问题描述】:

我在连接到 Pod 中的单个容器时遇到问题。 我创建了 Kubernetes 集群(一个主节点和一个节点)用于学习。 Master 安装在一台 VM 上,Node 安装在第二台 VM 上。

节点列表:

NAME      STATUS   ROLES                  AGE   VERSION
kmaster   Ready    control-plane,master   68m   v1.20.2
ubuntu    Ready    <none>                 57m   v1.20.2

集群信息:

Kubernetes control plane is running at https://192.168.0.102:6443
KubeDNS is running at https://192.168.0.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Everything was working fine until VM's restarting.
One Pod with eclipse-mosquitto mqtt broker has some problem with networking with container inside.

下面的 pod 列表:

NAME                          READY   STATUS    RESTARTS   AGE   IP                NODE     NOMINATED NODE   READINESS GATES
mqttbroker-574b696f76-x26jq   1/1     Running   0          57m   192.168.243.193   ubuntu   <none>           <none>

以下问题 pod 的描述:

Name:         mqttbroker-574b696f76-x26jq
Namespace:    default
Priority:     0
Node:         ubuntu/192.168.0.121
Start Time:   Mon, 08 Feb 2021 00:18:16 -0800
Labels:       app=mqttbroker
              pod-template-hash=574b696f76
Annotations:  cni.projectcalico.org/podIP: 192.168.243.193/32
              cni.projectcalico.org/podIPs: 192.168.243.193/32
Status:       Running
IP:           192.168.243.193
IPs:
  IP:           192.168.243.193
Controlled By:  ReplicaSet/mqttbroker-574b696f76
Containers:
  mosquitto:
    Container ID:   docker://73417f8046abfd8773154cde02b7366f9d7c26331b03b141e89855deec71e273
    Image:          eclipse-mosquitto
    Image ID:       docker-pullable://eclipse-mosquitto@sha256:0916ce445d7f3945168966ab987515a081f2f2c761acb85ae00ff44d97d3a84f
    Port:           1883/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Mon, 08 Feb 2021 00:18:20 -0800
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     750m
      memory:  700Mi
    Requests:
      cpu:        500m
      memory:     500Mi
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-qgs7v (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-qgs7v:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-qgs7v
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:          <none>

但是当我检查容器的日志时,我在分配 IP 时遇到了一些错误: 容器日志

1612772300: mosquitto version 2.0.7 starting
1612772300: Config loaded from /mosquitto/config/mosquitto.conf.
1612772300: Starting in local only mode. Connections will only be possible from clients running on this machine.
1612772300: Create a configuration file which defines a listener to allow remote access.
1612772300: Opening ipv4 listen socket on port 1883.
1612772300: Opening ipv6 listen socket on port 1883.
1612772300: Error: Address not available
1612772300: mosquitto version 2.0.7 running

当我检查分配给容器的地址时,我看到了奇怪的 IP 掩码。 我想这可能是我的问题。在 ifconfig 输出下方。

eth0      Link encap:Ethernet  HWaddr 5A:27:37:13:F7:06  
          inet addr:192.168.243.193  Bcast:192.168.243.193  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:14328 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14315 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:927289 (905.5 KiB)  TX bytes:773046 (754.9 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:138 errors:0 dropped:0 overruns:0 frame:0
          TX packets:138 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7597 (7.4 KiB)  TX bytes:7597 (7.4 KiB)

以下部署和服务:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: mqttbroker
  labels:
    app: mqttbroker
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mqttbroker
  template:
    metadata:
      labels:
        app: mqttbroker
    spec:
      containers:
      - name: mosquitto
        image: eclipse-mosquitto
        resources:
          requests:
            cpu: "0.5"
            memory: "500Mi"
          limits:
            cpu: "0.75"
            memory: "700Mi"
        ports:
          - name: mqttbroker-1883
            containerPort: 1883

集群 IP 服务

apiVersion: v1  
kind: Service  
metadata:  
  name: mosquitto-service  
spec:
  type: ClusterIP
  selector:  
    app: mqttbroker  
  ports:
    - name: service-mqtt-1883
      protocol: TCP  
      port: 1883
      targetPort: 1883

Nodeport IP 服务

apiVersion: v1
kind: Service
metadata:
  name: mosquittoservice
spec:
  type: NodePort
  ports:
  - name: "1883"
    port: 80
    targetPort:
    nodePort: 30081 # acces service via external port number
  selector:
    app: mqttbroker

服务列表:

NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE    SELECTOR
kubernetes          ClusterIP   10.96.0.1        <none>        443/TCP        116m   <none>
mosquitto-service   ClusterIP   10.98.70.62      <none>        1883/TCP       101m   app=mqttbroker
mosquittoservice    NodePort    10.106.207.192   <none>        80:30081/TCP   101m   app=mqttbroker

mosquitto-service 说明

Name:              mosquitto-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=mqttbroker
Type:              ClusterIP
IP Families:       <none>
IP:                10.98.70.62
IPs:               10.98.70.62
Port:              service-mqtt-1883  1883/TCP
TargetPort:        1883/TCP
Endpoints:         192.168.243.193:1883
Session Affinity:  None
Events:            <none>

mosquittoservice 说明

Name:                     mosquittoservice
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=mqttbroker
Type:                     NodePort
IP Families:              <none>
IP:                       10.106.207.192
IPs:                      10.106.207.192
Port:                     1883  80/TCP
TargetPort:               1883/TCP
NodePort:                 1883  30081/TCP
Endpoints:                192.168.243.193:1883
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我的问题是什么可能导致这个问题以及如何解决它?

谢谢你的回答!!

编辑: 当我调用容器的功能时,如下所示工作正常。

kubectl exec -it mqttbroker-574b696f76-x26jq -- mositto_sub -h localhost -p 1883 -t topic -C 4

如果我将“localhost”更改为 IP 地址,我会被拒绝连接。

kubectl exec -it mqttbroker-574b696f76-x26jq -- mositto_sub -h 192.168.0.102 -p 1883 -t topic -C 4
Error: Connection refused
command terminated with exit code 1

如果我调用下面的函数,我也会被拒绝连接。

kubectl exec -it mqttbroker-574b696f76-x26jq -- mosquitto_sub -h 192.168.0.102 -p 30081 -t topic -C 4
Error: Connection refused
command terminated with exit code 1

【问题讨论】:

  • 不应使用图片进行文本输出(在how to ask 页面中特别提到。除此之外,不应要求读者点击 8 个链接来查看您的任何内容)已经在其中混淆了。此外,任何网络问题都属于ServerFault.com
  • 请编辑您的问题并将所有信息作为文本发布,而不是链接。复制您的问题会更容易。只是为了确认一下,您问的是Running pod -wxmft 的问题,而不是CrashLoop pod?
  • 抱歉让帖子混乱,我认为链接可能比长粘贴的文本输出更好。无论如何,我会编辑我的帖子。 @PjoterS 我的问题是关于 pod -wxmft。
  • 这是您的本地环境还是云环境?您是否允许端口 30081 上的流量?我猜您的问题与 mqtt 配置有关。 Github 上有类似的帖子:[Mosquitto 无法启动](github.com/eclipse/mosquitto/issues/2074) 其中解决方案是将listener 1883 添加到您的配置文件中。第二件事是Starting in local only mode. Connections will only be possible from clients running on this machine.,它指出它应该只在本地主机上工作?我猜this comment回答你的问题
  • 是的。抱歉迟了回应。当我将 mosquitto.conf 文件挂载为 ConfigMap 时,我在其中指定了“listener 1883”,我的代理工作正常,其他订阅者获取数据。感谢您的帮助@PjoterS

标签: kubernetes networking


【解决方案1】:

问题和解决方案已在评论部分确定。

问题的根本原因是在1883 上缺少listener 的配置。

类似问题的其他可能解决方案可以在 Github 线程 - Mosquitto unable to start 中找到。

问题已通过使用 ConfigMap 解决,其中在 1883 上指定了 listener

当我将 mosquitto.conf 文件挂载为 ConfigMap 时,我在其中指定了“listener 1883”,我的代理工作正常,其他订阅者获取数据。

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 2019-04-06
    • 2020-06-16
    • 2021-04-04
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2017-08-25
    相关资源
    最近更新 更多