一些快速背景知识:在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开箱即用
答案 0 :(得分:1)
为什么仅从Pod的IP拒绝我的连接?
因为您的程序显然只监听本地主机(aka 127.0.0.1
aka lo0
)
在不了解您的容器的情况下,我们无法进一步为您提供建议,但这几乎可以肯定是根据您的描述所存在的问题。