Kubernetes NodePort无法正常工作

时间:2019-10-13 22:48:01

标签: docker nginx curl kubernetes

我在本地计算机上有一个集群Kubernetes集群,还有一个树莓派。为了测试集群,我创建了一个nginx部署和一个我想作为NodePort访问的服务。但是因为上帝知道原因,所以我无法使用上述服务。下面是我的部署和服务文件。

kubectl get nodes

NAME      STATUS                        ROLES    AGE    VERSION
anima     Ready                         master   7d5h   v1.16.1
bahamut   Ready                         <none>   7d4h   v1.16.1

我的服务和部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/hostname: bahamut


apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 3030
    targetPort: 80
  type: NodePort

kubectl get pods -o wide之后:

NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
nginx-67c8c4b564-6x7g5   1/1     Running   0          6m21s   10.244.1.13   bahamut   <none>           <none>

我的部署,kubectl get deployments -o wide

NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
nginx   1/1     1            1           7m55s   nginx        nginx:latest   app=nginx

我的服务,kubectl get svc -o wide

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          7d5h    <none>
nginx        NodePort    10.102.203.77   <none>        3030:30508/TCP   8m54s   app=nginx

最后,kubectl get endpoints -o wide

NAME         ENDPOINTS           AGE
kubernetes   192.168.25.4:6443   7d5h
nginx        10.244.1.13:80      9m41s


我的Kubernetes主本地IP是192.168.25.4,而树莓派IP是192.168.25.6。部署服务后,我尝试了:

curl 192.168.25.6:3030
curl: (7) Failed to connect to 192.168.25.6 port 3030: Connection refused

curl 192.168.25.6:80
curl: (7) Failed to connect to 192.168.25.6 port 80: Connection refused

curl 192.168.25.6:30508 (hangs)

也尝试使用主节点IP,服务IP和列出的群集IP,但没有任何效果。

编辑

如果我在部署中使用hostNetwork=true并使用容器端口上的节点本地IP对其进行访问,则它可以工作,但是显然这不是我想要的。我想了解为什么Kubernetes不允许我通过该服务访问容器。

3 个答案:

答案 0 :(得分:3)

NodePort在30508的情况下在静态端口(NodePort)上在每个节点的IP上公开服务。请查看更多详细信息here

this将分享有关裸机群集的更多详细信息。

答案 1 :(得分:1)

port应该是服务80公开的端口的值。

如果要将节点端口固定为特定值,请将服务更改为以下内容:

  - port: 80
    nodePort: 30030

请注意,节点端口范围为30000 - 32767 之后,您应该可以查询:

curl <node>:30030

答案 2 :(得分:0)

问题出在法兰绒接口上。 ip link delete flannel.1并重新启动绒布容器后,该服务开始正常运行。