【发布时间】:2019-05-16 21:32:48
【问题描述】:
转发端口时出现以下错误。有人可以帮忙吗?
mjafary$ sudo kubectl port-forward sa-frontend 88:82
Forwarding from 127.0.0.1:88 -> 82
Forwarding from [::1]:88 -> 82
错误日志:
Handling connection for 88
Handling connection for 88
E1214 01:25:48.704335 51463 portforward.go:331] an error occurred forwarding 88 -> 82: error forwarding port 82 to pod a017a46573bbc065902b600f0767d3b366c5dcfe6782c3c31d2652b4c2b76941, uid : exit status 1: 2018/12/14 08:25:48 socat[19382] E connect(5, AF=2 127.0.0.1:82, 16): Connection refused
这里是对 pod 的描述。我的期望是,当我在浏览器中点击 localhost:88 时,请求应该转发到 jafary/sentiment-analysis-frontend 容器并且应该加载应用程序页面
mjafary$ kubectl describe pods sa-frontend
Name: sa-frontend
Namespace: default
Node: minikube/192.168.64.2
Start Time: Fri, 14 Dec 2018 00:51:28 -0700
Labels: app=sa-frontend
Annotations: <none>
Status: Running
IP: 172.17.0.23
Containers:
sa-frontend:
Container ID: docker://a87e614545e617be104061e88493b337d71d07109b0244b2b40002b2f5230967
Image: jafary/sentiment-analysis-frontend
Image ID: docker-pullable://jafary/sentiment-analysis-frontend@sha256:5ac784b51eb5507e88d8e2c11e5e064060871464e2c6d467c5b61692577aeeb1
Port: 82/TCP
Host Port: 0/TCP
State: Running
Started: Fri, 14 Dec 2018 00:51:30 -0700
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-mc5cn (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-mc5cn:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-mc5cn
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: <none>
【问题讨论】:
-
嗨,Jaf,欢迎来到 SO。您需要为您尝试连接的 Pod 发布 PodSpec,因为我们无法猜测它是否真的在端口 :82 上监听了某些东西。另外,您能否从集群内部(不使用端口转发)连接到该 Pod?
-
我已按要求将详细信息添加到说明中。我是 Kubernetes 新手,正在努力学习。您能否指导我如何在不使用端口转发的情况下从集群内连接到 Pod?
-
有两种方法,一种比另一种更有用:
kubectl -n default exec -it sa-frontend curl -v localhost:82然后来自另一个 Pod 的相同技巧,一种已经在运行,或者一种专门为调试目的而创建。我希望您也可以从 minikube 的 VM 中 curl:minikube ssh curl -v 172.17.0.23:82(我不使用 minikube,因此您可能必须将它们分成两个命令,ssh,然后 curl) -
所以,仅根据您上面的输出,我看不到您将 nginx 配置为侦听
:82的位置,因为容器说它正在侦听:80:docker run --rm -it --entrypoint=/bin/grep 'jafary/sentiment-analysis-frontend@sha256:5ac784b51eb5507e88d8e2c11e5e064060871464e2c6d467c5b61692577aeeb1' listen /etc/nginx/conf.d/default.conf@ 987654329@ -
知道了。因此,当我创建一个新 pod 时,它将使用在容器的 Dockerfile 中配置的基本 nginx 映像的默认端口配置在其中创建一个容器。当我尝试使用从 88 到 80 的端口转发时,它开始工作了..
标签: kubernetes portforwarding kubectl