Kubernetes通过localhost与端口转发访问应用程序

时间:2020-01-24 11:19:51

标签: kubernetes kubectl

我想使用kubectl port-forward命令通过本地主机访问我的应用程序。但是当我运行kubectl port-forward road-dashboard-dev-5cdc465475-jwwgz 8082:8080时,收到以下错误。

> Forwarding from 127.0.0.1:8082 -> 8080 Forwarding from [::1]:8082 ->
> 8080 Handling connection for 8082 Handling connection for 8082 E0124
> 14:15:27.173395    4376 portforward.go:400] an error occurred
> forwarding 8082 -> 8080: error forwarding port 8080 to pod
> 09a76f6936b313e438bbf5a84bd886b3b3db8f499b5081b66cddc390021556d5, uid
> : exit status 1: 2020/01/24 11:15:27 socat[9064] E connect(6, AF=2
> 127.0.0.1:8080, 16): Connection refused

我也尝试通过exec -it在集群中连接Pod,但是它没有正常工作。我可能忽略的缺失点是什么?

    node@road-dashboard-dev-5cdc465475-jwwgz:/usr/src/app$ curl -v localhost:8080
* Rebuilt URL to: localhost:8080/
*   Trying ::1...
* TCP_NODELAY set
* connect to ::1 port 8080 failed: Connection refused
*   Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8080: Connection refused

kubectl全力以赴,我确定容器端口值设置为8080。

NAME                                      READY   STATUS    RESTARTS   AGE
pod/road-dashboard-dev-5cdc465475-jwwgz   1/1     Running   0          34m
pod/road-dashboard-dev-5cdc465475-rdk7g   1/1     Running   0          34m

NAME                         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/road-dashboard-dev   NodePort   10.254.61.225   <none>        80:41599/TCP   18h

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/road-dashboard-dev   2/2     2            2           18h

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/road-dashboard-dev-5cdc465475   2         2         2       34m


Name:               road-dashboard-dev-5cdc465475-jwwgz
Namespace:          dev
Priority:           0
PriorityClassName:  <none>
Node:               c123
Containers:
  road-dashboard:
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Fri, 24 Jan 2020 13:42:39 +0300
    Ready:          True
    Restart Count:  0
    Environment:    <none>

1 个答案:

答案 0 :(得分:1)

要调试您的问题,应让端口转发命令在前台调整,并从第二个终端卷曲,然后在端口转发提示符下查看输出内容。

$ kubectl get all -o wide
NAME           READY   STATUS    RESTARTS   AGE    IP            NODE         NOMINATED NODE   READINESS GATES
pod/nginx      1/1     Running   2          112m   10.244.3.43   k8s-node-3   <none>           <none>

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        11d   <none>
service/nginx        NodePort    10.96.130.207   <none>        80:31316/TCP   20m   run=nginx

示例:

$ kubectl port-forward nginx 31000:80
Forwarding from 127.0.0.1:31000 -> 80
Forwarding from [::1]:31000 -> 80

第二个终端窗口中的卷曲将端口向前卷曲。

$ curl localhost:31000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

您应该看到在第一终端上的portforward promt列表正在处理如下所示的连接,注意新行Handling connection for 31000

$ kubectl port-forward nginx 31000:80
Forwarding from 127.0.0.1:31000 -> 80
Forwarding from [::1]:31000 -> 80
Handling connection for 31000

因此,如果像我这样错误的端口转发如下​​(请注意,我的模式为nginx容器暴露端口80的端口8080)

$ kubectl port-forward nginx 31000:8080
Forwarding from 127.0.0.1:31000 -> 8080
Forwarding from [::1]:31000 -> 8080

卷曲将在端口转发提示上导致清除错误,指示到端口8080的连接不正确时,该连接被容器拒绝。我们会得到一个空的回复。

$ curl -v localhost:31000
* Rebuilt URL to: localhost:31000/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 31000 (#0)
> GET / HTTP/1.1
> Host: localhost:31000
> User-Agent: curl/7.47.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server

$ kubectl port-forward nginx 31000:8080
Forwarding from 127.0.0.1:31000 -> 8080
Forwarding from [::1]:31000 -> 8080
Handling connection for 31000
E0124 11:35:53.390711   10791 portforward.go:400] an error occurred forwarding 31000 -> 8080: error forwarding port 8080 to pod 88e4de4aba522b0beff95c3b632eca654a5c34b0216320a29247bb8574ef0f6b, uid : exit status 1: 2020/01/24 11:35:57 socat[15334] E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused
相关问题