无法通过群集中的Pod IP访问Pod,从而导致活动/就绪探针故障

时间:2019-02-27 00:13:11

标签: docker kubernetes minikube

一些快速背景知识:在golang中创建一个在MacOS 10.14.2的minikube上运行的应用程序

karlewr [0] $ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-18T11:37:06Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4", GitCommit:"f49fa022dbe63faafd0da106ef7e05a29721d3f1", GitTreeState:"clean", BuildDate:"2018-12-14T06:59:37Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}

问题: 我无法从群集内部通过Pod IP访问Pod。这个问题仅在这一个吊舱中发生,这使我相信我在某处配置错误。

我的广告连播规范如下:

containers:
  - name: {{ .Chart.Name }}
    image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
    ports:
      - name: http
        containerPort: 8080
        protocol: TCP
    livenessProbe:
      httpGet:
        path: /ping
        port: 8080
      initialDelaySeconds: 60
    readinessProbe:
      httpGet:
        path: /ping
        port: 8080
      initialDelaySeconds: 60

奇怪的是,我可以通过在活动性和就绪性探针运行之前以及在初始化Pod之后在端口8080上将Pod端口转发并运行curl localhost:8080/ping来访问它。这将返回200 OK。

同样在CrashLoopBackoff之前的这段时间内,如果我进入minikube节点并运行curl http://172.17.0.21:8080/ping,我将得到curl: (7) Failed to connect to 172.17.0.21 port 8080: Connection refused。使用的IP是我的广告连播的IP。

但是当我在initialDelaySeconds期过后描述广告连播时,我看到了:

  Warning  Unhealthy  44s (x3 over 1m)  kubelet, minikube  Readiness probe failed: Get http://172.17.0.21:8080/ping: dial tcp 172.17.0.21:8080: connect: connection refused
  Warning  Unhealthy  44s (x3 over 1m)  kubelet, minikube  Liveness probe failed: Get http://172.17.0.21:8080/ping: dial tcp 172.17.0.21:8080: connect: connection refused

为什么仅从Pod的IP拒绝我的连接?

编辑,我没有运行任何自定义联网功能,只是将minikube开箱即用

1 个答案:

答案 0 :(得分:1)

  

为什么仅从Pod的IP拒绝我的连接?

因为您的程序显然只监听本地主机(aka 127.0.0.1 aka lo0

在不了解您的容器的情况下,我们无法进一步为您提供建议,但这几乎可以肯定是根据您的描述所存在的问题。