【问题标题】:Kubernetes exposed pod connection refused - one time works, sometime notKubernetes 暴露的 pod 连接被拒绝 - 一次有效,有时无效
【发布时间】:2018-11-01 08:30:55
【问题描述】:

我有一个主节点和 1 个节点的 kubernetes 安装。

它已配置好,一切运行良好。

$ kubectl get pods

NAME          READY     STATUS    RESTARTS   AGE 
mantis-gfs    1/1       Running   1          22h 
mongodb-gfs   1/1       Running   0          14h

我暴露了 pod mongodb-gfs:

$ kubectl expose pod mongodb-gfs --port=27017 --external-ip=10.9.8.100 --name=mongodb --labels="env=development"

外部IP 10.9.8.100是kubernetes主节点的IP

服务创建成功。

$ kubectl get services

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
glusterfs-cluster   ClusterIP   10.111.96.254   <none>        1/TCP       23d
kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP     29d
mongodb             ClusterIP   10.100.149.90   10.9.8.100    27017/TCP   1m

现在我可以使用以下方式访问 mongo:

mongo 10.9.8.100:27017 

这就是问题所在。它有一段时间有效,但有一段时间无效。 我连接一次并获得外壳,我第二次连接并获得:

$ mongo 10.9.8.100:27017

MongoDB shell version v3.4.17
connecting to: mongodb://10.9.8.100:27017/test
2018-11-01T09:27:23.524+0100 W NETWORK  [thread1] Failed to connect to 10.9.8.100:27017, in(checking socket for error after poll), reason: Connection refused
2018-11-01T09:27:23.524+0100 E QUERY    [thread1] Error: couldn't connect to server 10.9.8.100:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:240:13
@(connect):1:6
exception: connect failed

然后我再试一次,它工作,再试一次,它工作,再试一次,它不起作用......

任何线索可能导致问题?

【问题讨论】:

    标签: networking kubernetes


    【解决方案1】:

    我找到了问题和解决方案。问题是 pod 定义。对于两个 pod:mongodb-gfs 和 mantis-gfs 我有相同的标签设置。然后我用相同的标签=“env=development”公开了服务。在这种情况下,我希望始终流向一个 pod 的流量被“负载平衡”到不同类型的一个或其他 pod(它们具有相同的标签)。

    更改 mongodb-gfs pod 定义中的标签解决了连接问题。

    【讨论】:

    • 对我来说同样的问题,但我只有一个 pod,用于测试的简单 httpd 服务,端口是 80,外部端口是集群 IP 地址之一,我遇到同样的问题,有时它连接,有时不是。所以不确定这是否是 POD LABEL 问题。
    【解决方案2】:

    有同样的问题,przemas 用选择器引导我朝着正确的方向前进。当不同的 pod 具有相同的选择器标签时,k8s 有时会选择错误的。您必须为选择器选择唯一的名称。奇怪的是,在选择 pod 的任何地方都没有记录。

    apiVersion: v1
    kind: Service
    metadata:
     name: revproxy-svc
    spec:
     selector:
       role: app
     type: NodePort
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
     name: loadbalance-svc
    spec:
     selector:
       role: app
     type: NodePort
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: loadbalancer-python
    spec:
     replicas: 1
     selector:
       matchLabels:
         role: app
     template:
       metadata:
         labels:
           role: app
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: revproxy
    spec:
     replicas: 2
     selector:
       matchLabels:
         role: app
     template:
       metadata:
         labels:
           role: app
    

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2018-09-30
      • 1970-01-01
      相关资源
      最近更新 更多