每次我尝试访问我机器上的 NodePort 时,它都会显示“错误连接被拒绝”。我不明白,因为我在线阅读的示例暗示我可以在笔记本电脑上运行 Docker Desktop,连接到集群,并通过它们的节点端口访问服务。
我的机器:
k3s
和 minikube
进行了额外测试,结果相似)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 都无法访问?
答案 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
上访问它。