NodePort 错误连接被拒绝(Docker 桌面,Windows,Kubernetes)
NodePort Error Connection Refused (Docker Desktop, Windows, Kubernetes)
每次我尝试访问我机器上的 NodePort 时,它都会显示“错误连接被拒绝”。我不明白,因为我在网上阅读的示例暗示我可以 运行 Docker 笔记本电脑上的桌面,连接到集群,并通过它们的节点端口访问服务。
我的机器:
- Windows 10
- Docker 桌面版(使用
k3s
和 minikube
进行了额外测试,结果相似)
- Kubernetes 1.19+
Kubernetes 配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ngnix-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
输出和 cURL 测试:
PS C:\Users\ME\nginx> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 169m
ngnix-service NodePort 10.108.214.243 <none> 80:30007/TCP 7m19s
PS C:\Users\ME\nginx> curl.exe http://localhost:30007
curl: (7) Failed to connect to localhost port 30007: Connection refused
我也试过节点 ip:
PS C:\Users\ME\nginx> kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
docker-desktop Ready master 6d v1.19.7 192.168.65.4 <none> Docker Desktop 5.10.25-linuxkit docker://20.10.5
PS C:\Users\ME\nginx> curl.exe http://192.168.65.4:30007
curl: (7) Failed to connect to 192.168.65.4 port 30007: Timed out
我尝试从浏览器访问 NodePort 时得到相同的响应 (Chrome)。 ERR_CONNECTION_REFUSED
有什么我想念的吗?为什么所有 NodePort 都无法访问?
Kubernetes 运行 在本地,仍然 运行 在其内部网络上。
curl.exe http://192.168.65.4:30007
这里使用的是 Kubernetes 内部网络的 IP 地址。您必须公开您的 Kubernetes 服务,以便它获得集群外部地址。
看这部分:
EXTERNAL-IP
<none>
您通常使用 type: Loadbalancer
服务或使用 Ingress-gateway 在集群外公开服务。
请参阅此 ,了解如何将您的服务从 type:NodePort
更改为 type: LoadBalancer
以将其公开给您的本地主机。
访问服务的最简单方法是使用 kubectl port-forward
,例如
kubectl port-forward ngnix-service 8080:80
然后就可以在localhost:8080
上访问了。
不确定这是否对任何人有帮助。我遇到了类似的问题,其中正确创建了 NodePort,入口点指向正确的 containerPort 和 IP。然而,我无法卷曲 NodePort。经过一天的搜索,这就是我解封的原因。并认为我会分享以减轻人们搜索的痛苦。
在 运行 之后(对于 mac)
rm -rf ~/Library/Group\ Containers/group.com.docker/pki/
对于windows,文件夹是C:/ProgramData/DockerDesktop/pki
然后重启docker桌面
来源 (https://github.com/docker/for-mac/issues/3594#issuecomment-621487150)
每次我尝试访问我机器上的 NodePort 时,它都会显示“错误连接被拒绝”。我不明白,因为我在网上阅读的示例暗示我可以 运行 Docker 笔记本电脑上的桌面,连接到集群,并通过它们的节点端口访问服务。
我的机器:
- Windows 10
- Docker 桌面版(使用
k3s
和minikube
进行了额外测试,结果相似) - Kubernetes 1.19+
Kubernetes 配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ngnix-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
输出和 cURL 测试:
PS C:\Users\ME\nginx> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 169m
ngnix-service NodePort 10.108.214.243 <none> 80:30007/TCP 7m19s
PS C:\Users\ME\nginx> curl.exe http://localhost:30007
curl: (7) Failed to connect to localhost port 30007: Connection refused
我也试过节点 ip:
PS C:\Users\ME\nginx> kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
docker-desktop Ready master 6d v1.19.7 192.168.65.4 <none> Docker Desktop 5.10.25-linuxkit docker://20.10.5
PS C:\Users\ME\nginx> curl.exe http://192.168.65.4:30007
curl: (7) Failed to connect to 192.168.65.4 port 30007: Timed out
我尝试从浏览器访问 NodePort 时得到相同的响应 (Chrome)。 ERR_CONNECTION_REFUSED
有什么我想念的吗?为什么所有 NodePort 都无法访问?
Kubernetes 运行 在本地,仍然 运行 在其内部网络上。
curl.exe http://192.168.65.4:30007
这里使用的是 Kubernetes 内部网络的 IP 地址。您必须公开您的 Kubernetes 服务,以便它获得集群外部地址。
看这部分:
EXTERNAL-IP
<none>
您通常使用 type: Loadbalancer
服务或使用 Ingress-gateway 在集群外公开服务。
请参阅此 type:NodePort
更改为 type: LoadBalancer
以将其公开给您的本地主机。
访问服务的最简单方法是使用 kubectl port-forward
,例如
kubectl port-forward ngnix-service 8080:80
然后就可以在localhost:8080
上访问了。
不确定这是否对任何人有帮助。我遇到了类似的问题,其中正确创建了 NodePort,入口点指向正确的 containerPort 和 IP。然而,我无法卷曲 NodePort。经过一天的搜索,这就是我解封的原因。并认为我会分享以减轻人们搜索的痛苦。
在 运行 之后(对于 mac)
rm -rf ~/Library/Group\ Containers/group.com.docker/pki/
对于windows,文件夹是C:/ProgramData/DockerDesktop/pki
然后重启docker桌面
来源 (https://github.com/docker/for-mac/issues/3594#issuecomment-621487150)