kubernetes pod 无法(通过服务)连接到自身,只能连接到其他 pod 容器

2023-11-21

我有一个 kubernetes 单节点设置(请参阅https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html )

我有一个服务和一个创建 Pod 的复制控制器。这些 Pod 需要连接到同一服务中的其他 Pod(注意:这最终是为了让 mongo 能够运行副本集(非本地主机),但这个简单的示例演示了 mongo 存在的问题)。

当我从任何节点连接到服务时,它将(按预期)分发到其中一个 Pod。这将一直有效,直到它自身负载平衡(我所在的容器)。然后就无法连接了。

很抱歉说得啰嗦,但我将附上我的所有文件,以便您可以看到我在这个小示例中所做的事情。

Dockerfile:

FROM ubuntu
MAINTAINER Eric H
RUN apt-get update; apt-get install netcat
EXPOSE 8080
COPY ./entry.sh /
ENTRYPOINT ["/entry.sh"]

这是入口点

#!/bin/bash
# wait for a connection, then tell them who we are 
while : ; do 
    echo "hello, the date=`date`; my host=`hostname`" | nc -l 8080 
    sleep .5
done

构建 dockerfile

docker build -t echoserver .

标记并上传到我的 k8s 集群的注册表

docker tag -f echoserver:latest 127.0.0.1:5000/echoserver:latest
docker push 127.0.0.1:5000/echoserver:latest

这是我的复制控制器

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    role: echo-server
    app: echo
  name: echo-server-1
spec:
  replicas: 3
  template:
    metadata:
      labels:
        entity: echo-server-1
        role: echo-server
        app: echo
    spec:
      containers:
      - 
        image: 127.0.0.1:5000/echoserver:latest
        name: echo-server-1

        ports:
          - containerPort: 8080

最后,这是我的服务

kind: Service
metadata:
  labels:
    app: echo
    role: echo-server
    name: echo-server-1
  name: echo-server-1
spec:
  selector:
    entity: echo-server-1
    role: echo-server
  ports:
    - port: 8080
      targetPort: 8080

创建我的服务kubectl create -f echo.service.yaml

创建我的 rckubectl create -f echo.controller.yaml

获取我的 POD

kubectl get po
NAME                  READY     STATUS    RESTARTS   AGE
echo-server-1-jp0aj   1/1       Running   0          39m
echo-server-1-shoz0   1/1       Running   0          39m
echo-server-1-y9bv2   1/1       Running   0          39m

获取服务IP

kubectl get svc
NAME            CLUSTER_IP   EXTERNAL_IP   PORT(S)    SELECTOR                                AGE
echo-server-1   10.3.0.246   <none>        8080/TCP   entity=echo-server-1,role=echo-server   39m

执行到其中一个 pod 中kubectl exec -t -i echo-server-1-jp0aj /bin/bash

现在多次连接到该服务...它将为我提供所有 Pod 的应用程序消息,除非它到达自身,然后挂起。

root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:02:38 UTC 2016; my host=echo-server-1-y9bv2
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
^C
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:02:43 UTC 2016; my host=echo-server-1-shoz0
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
^C
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:19 UTC 2016; my host=echo-server-1-y9bv2
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:23 UTC 2016; my host=echo-server-1-shoz0
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:26 UTC 2016; my host=echo-server-1-y9bv2
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:27 UTC 2016; my host=echo-server-1-shoz0
root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080

如何配置以便服务的所有成员都可以连接到所有其他成员(包括其自身)?


感谢所有在 GitHub 上提供帮助的人。
解决方法如下:

tanen01 于 2 月 4 日发表评论 在 k8s v1.1.7 上看到同样的问题 稳定的

问题发生在:

kube-proxy --proxy-mode=iptables 

一旦我将其更改为:

           --proxy-mode=userspace 

(也是默认的),然后它又可以工作了。

所以,如果您遇到这种情况,请尝试关闭--proxy-mode你几时开始kube-proxy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes pod 无法(通过服务)连接到自身,只能连接到其他 pod 容器 的相关文章

随机推荐

  • Angular JS (angular-ui-tree) ng-click 冲突与拖动开始事件

    我目前正在使用角度 ui 树图书馆和我试图实现以下行为 当用户单击 可拖动节点 时 它会触发 ng click 功能 如果用户单击并开始拖动 ng click 会被忽略 并开始常规的拖放操作 我有以下 html 结构 div div div
  • 为什么 #!/usr/bin/env ruby​​ 在 crontab 中不起作用?

    我已经通过 rvm 系统范围 安装了 ruby 并通过普通控制台正常工作 并且我的 Rails 程序在两者上都运行正常rails runner and apache2 passenger 现在在 crontab 中 我调用了rails ru
  • 由于 LogCollectManager.getUserType() 错误,无法启动 Android 应用程序

    当我尝试在华为 P9 上运行我的应用程序时 出现错误 尝试调用虚拟方法 int com huawei lcagent client LogCollectManager getUserType 为空 对象引用 有没有办法调试这个 因为应用程序
  • javascript 纬度经度到地球上的 xyz 位置 (thirdjs)

    我正在玩 Three js 我想在更大的球体上的特定坐标上渲染对象 我非常接近解决方案 但我没有从 lat lon 获得正确的 xyz 位置 我在jsfiddle上设置了一个测试用例 有两个坐标 latlons 40 7142700 74
  • 如何根据 Git 分支的名称为其着色?

    我的本地 git 存储库中有许多分支 并且我保留了特定的命名约定 这有助于我区分最近使用的分支和旧分支 或者区分与 master 合并的分支和未合并的分支 有没有办法在输出中为分支名称着色git branch根据一些基于正则表达式的规则而不
  • 如何调试 .BAT 脚本?

    有没有办法单步执行 bat 脚本 问题是 我有一个构建脚本 它调用很多其他脚本 我想看看它们的调用顺序是什么 这样我就可以知道我到底应该去哪里并添加我的修改 我不知道如何逐步执行 bat 文件 但您可以使用echo and pause帮助调
  • 定义在 Swift 中被视为类的结构

    在斯威夫特String结构也被视为类对象 就像使用NSCoder encodeObject forKey 方法 我确实知道String直接与 Objective C 类桥接 NSString 但是有没有办法定制struct其行为类似 也许将
  • REST 应用程序的 RequestBody

    我对 SpringMVC REST 概念有点陌生 需要专家的帮助来理解 解决以下问题 我开发了一个 SpringMVC 应用程序 以下是控制器类代码的一部分 它按原样工作得很好 这意味着它可以与 JSON 类型对象一起工作 RequestM
  • docker-compose 上的 WordPress 无法运行

    这是我的 docker compose yml version 2 services wordpress image wordpress ports 8080 80 environment WORDPRESS DB PASSWORD exa
  • Python Scrapy - 从 mysql 填充 start_urls

    我正在尝试使用 MYSQL 表中的 SELECT 来填充 start url蜘蛛 py 当我运行 scrapy runningpider Spider py 时 我没有得到任何输出 只是它完成时没有错误 我已经在 python 脚本中测试了
  • 使用 CoreData 在 iPhone 上导入大型数据集

    我面临着非常烦人的问题 我的 iPhone 应用程序正在从网络服务器加载数据 数据以 plist 形式发送 解析时需要使用 Core Data 将其存储到 SQLite 数据库 问题是 在某些情况下 这些数据集太大 5000 多条记录 导入
  • java.net.UnknownHostException:无法解析主机“”:没有与主机名关联的地址,且输入结束位于字符 0 处

    我创建了一个从我的网络服务加载问题的应用程序 并且运行良好 但是 有时它会崩溃 我不明白为什么会发生这种情况 特别是因为我也给了它所需的权限 它工作正常 但随机崩溃并给我这个报告 private void sendContinentQues
  • 多个 goroutine 监听一个通道

    我有多个 goroutine 尝试同时在同一通道上接收数据 看起来最后一个在通道上开始接收的 Goroutine 获得了该值 这是语言规范中的某个地方还是未定义的行为 c make chan string for i 0 i lt 5 i
  • android 中奇怪的 webview goBack 问题

    我在 Android 中使用 webview 但奇怪的是 有时甚至是webviewcanGoBack方法返回true 网页视图goBack方法不起作用 if webView canGoBack webView goBack 谢谢你的任何想法
  • Oracle 写入文件

    我正在运行 Oracle 并有一个查询从数据库中提取一些结果 我想将结果写入文本文件 我该怎么做呢 我首选的方法是使用 UTL FILE 有人可以举例说明如何做到这一点吗 如果您使用 Sql Plus 则非常简单 SQL gt spool
  • iOS 中如何获取触摸尺寸?

    我明白那个这个回应明确指出 如果没有私有函数调用 这是不可能的 因此 根据苹果的条款 这种方式不能在App Store应用程序上使用 然而 一些应用程序似乎已经使用了这个函数调用 倒数第二个用于实际防手掌误触 无需像 Note Taker
  • GL 表面和能见度:消失

    因此 我的应用程序中有一个 GLSurfaceView 由 GLSurfaceView Renderer 渲染并使用 JPCt 作为库 表面位于不可见的RelativeLayout 中 可见性 消失 当我将可见性更改为 可见 然后返回 消失
  • 防止 JavaScript 函数运行两次 (setTimeout)

    我有一个运行几秒钟的函数 使用setTimeout 单击按钮时将运行此函数 function complete var div document getElementById log setTimeout function div inne
  • 取消引用空指针

    为什么我无法取消引用空指针 也就是说 为什么我无法读 写地址为 0 的内存 我的进程的基指针是否有不同的地址 如果是 有没有办法获得可用于我的进程的默认堆的较低内存加法器 空指针不是指向 地址仅为 0 的内存 的指针 它只是一个特殊的指针
  • kubernetes pod 无法(通过服务)连接到自身,只能连接到其他 pod 容器

    我有一个 kubernetes 单节点设置 请参阅https coreos com kubernetes docs latest kubernetes on vagrant single html 我有一个服务和一个创建 Pod 的复制控制