NodePort 错误连接被拒绝(Docker 桌面、Windows、Kubernetes)

时间:2021-04-19 18:04:12

标签: docker kubernetes kubernetes-ingress

每次我尝试访问我机器上的 NodePort 时,它都会显示“错误连接被拒绝”。我不明白,因为我在线阅读的示例暗示我可以在笔记本电脑上运行 Docker Desktop,连接到集群,并通过它们的节点端口访问服务。

我的机器:

  • Windows 10
  • Docker 桌面(使用 k3sminikube 进行了额外测试,结果相似)
  • 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

输出和卷曲测试:

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

尝试从我的浏览器 (Chrome) 访问 NodePort 时,我得到了相同的响应。 ERR_CONNECTION_REFUSED

有什么我遗漏的吗?为什么所有 NodePort 都无法访问?

1 个答案:

答案 0 :(得分:2)

Kubernetes 在本地运行,仍然在其内部网络上运行。

<块引用>

curl.exe http://192.168.65.4:30007

这里使用的是 Kubernetes 内部网络的 IP 地址。您必须公开 Kubernetes 服务,以便它获得集群外部地址。

看这部分:

FROM ubuntu:18.04

RUN apt-get update -y && \      
    apt-get install -y \    
    libpq-dev \     
    gcc \
    python3-pip \
    unixodbc-dev

RUN apt-get update && apt-get install -y \
    curl apt-utils apt-transport-https debconf-utils gcc build-essential g++-5\
    && rm -rf /var/lib/apt/lists/*

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y --allow-unauthenticated msodbcsql17

RUN pip3 install pyodbc

WORKDIR /app

COPY requirements.txt requirements.txt


RUN pip3 install -r requirements.txt

COPY . .

CMD ["python3","LoadAPI_data.py"]

您通常使用 EXTERNAL-IP <none> 的服务或使用入口网关在集群外公开服务。

有关如何将服务从 type: Loadbalancer 更改为 type:NodePort 以将其公开给本地主机的信息,请参阅此 answer

访问您的服务的最简单方法是使用 type: LoadBalancer,例如

kubectl port-forward

然后您可以在 kubectl port-forward ngnix-service 8080:80 上访问它。

Use Port Forwarding to Access Applications in a Cluster