【问题标题】:Can't Access Kubernetes Service Exposed via NodePort无法访问通过 NodePort 公开的 Kubernetes 服务
【发布时间】:2019-07-26 12:44:39
【问题描述】:

我正在使用 minikube 在最新的 MacOS 上测试 kubernetes。

这是我的相关 YAML:

namespace.yml

apiVersion: v1
kind: Namespace
metadata:
  name: micro
  labels:
    name: micro

deployment.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: adderservice
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: adderservice
    spec:
      containers:
      - name: adderservice
        image: jeromesoung/adderservice:0.0.1
        ports:
        - containerPort: 8080

service.yml

apiVersion: v1
kind: Service
metadata:
  name: adderservice
  labels:
    run: adderservice
spec:
  ports:
    - port: 8080
      name: main
      protocol: TCP
      targetPort: 8080
  selector:
    run: adderservice
  type: NodePort

运行minikube start后,我部署的步骤如下:

  1. kubectl create -f namespace.yml 创建命名空间

  2. kubectl config set-context minikube --namespace=micro

  3. kubectl create -f deployment.yml

  4. kubectl create -f service.yml

然后,我使用以下命令获取 NodeIP 和 NodePort:

  1. kubectl get services 获取 NodePort
$ kubectl get services
NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
adderservice   NodePort   10.99.155.255   <none>        8080:30981/TCP   21h
  1. minikube ip获取nodeIP
$ minikube ip
192.168.99.103

但是当我卷曲时,我总是得到 Connection Refused 像这样:

$ curl http://192.168.99.103:30981/add/1/2
curl: (7) Failed to connect to 192.168.99.103 port 30981: Connection refused

所以我检查了node、pod、deployment和endpoint如下:

$ kubectl get nodes
NAME       STATUS    ROLES     AGE       VERSION
minikube   Ready     master    23h       v1.13.3

$ kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
adderservice-5b567df95f-9rrln   1/1       Running   0          23h

$ kubectl get deployments
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
adderservice   1         1         1            1           23h

$ kubectl get endpoints
NAME           ENDPOINTS         AGE
adderservice   172.17.0.5:8080   21h

我还检查了 minikube 的服务列表:

$ minikube service -n micro adderservice --url
http://192.168.99.103:30981

我已经阅读了很多关于通过 NodePorts 访问 k8s 服务的帖子。据我所知,我应该可以毫无问题地访问该应用程序。我唯一怀疑的是我正在使用自定义命名空间。这会导致访问问题吗?

我知道命名空间会改变 DNS,所以,为了完整起见,我还运行了以下命令:

$ kubectl exec -ti adderservice-5b567df95f-9rrln -- nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

$ kubectl exec -ti adderservice-5b567df95f-9rrln -- nslookup kubernetes.micro
Server:     10.96.0.10
Address:    10.96.0.10#53

Non-authoritative answer:
Name:   kubernetes.micro
Address: 198.105.244.130
Name:   kubernetes.micro
Address: 104.239.207.44

谁能帮帮我?谢谢。

【问题讨论】:

  • 这是自定义图片吗?你在 docker 上也遇到同样的问题吗?
  • 是的,这是我的 docker 镜像,仅用于测试目的。在我本地的 docker 容器中几乎没有运行时没有问题。
  • ADDERSERVICE_SERVICE_HOST 的值是多少?
  • 这里根据netstat的输出默认为[::]
  • 您可以手动将其分配为0.0.0.0 吗?

标签: docker kubernetes namespaces minikube


【解决方案1】:

错误Connection Refused主要表示容器内的应用程序不接受目标接口上的请求或未通过预期端口映射。

您需要注意的事项:

  • 确保您的应用程序绑定到0.0.0.0,以便它可以从外部(如在公共环境中)或通过其他容器接收来自容器外部的请求。
  • 确保您的应用程序确实在按预期监听 containerPorttargetPort

在您的情况下,您必须确保ADDERSERVICE_SERVICE_HOST 等于0.0.0.0ADDERSERVICE_SERVICE_PORT 等于8080 这应该与service.yml 中的targetPort 和@987654332 中的containerPort 具有相同的值@

【讨论】:

  • 嗨@Mostafa 我遇到了类似的问题,NodePort 似乎只通过 IPv6 侦听:netstat -al | grep 30036 仅输出:tcp6 0 0 [::]:30036 [::]:* LISTEN - 我想知道你是否能够更一般如何将应用程序绑定到0.0.0.0,以便它可以通过 IPv4 地址(即应用程序的节点 IP)可用?给出的解决方案似乎特定于 @XXXXX 的配置 该应用程序已正确部署,并且正在容器中运行。无法通过curl 或浏览器访问,结果只是超时或连接被拒绝。
  • 谢谢,我的应用绑定到 127.0.0.1 而不是 0.0.0.0 :)
【解决方案2】:

不回答这个问题,但如果有人像我一样用谷歌搜索到这里来遇到同样的问题。这是我针对相同问题的解决方案。

我的 Mac 系统 IP 和 minikube IP 不同。

所以 localhost:port 不起作用,而是尝试获取 IP

minikube ip

稍后,使用该 IP:Port 访问应用程序,它就可以工作了。

【讨论】:

  • 谢谢,我尝试使用 localhost 而不是 minikube ip,但 minikube ip 对我有用!
【解决方案3】:

检查服务是否真的在监听 8080。

在容器中尝试 telnet。

telnet 127.0.0.1 8080
.
.
.
telnet 172.17.0.5 8080

【讨论】:

  • 没有。使用 netstat 检查后,我可以看到该应用程序正在侦听 38641... Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::38641 :::* LISTEN 1/node `
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2023-01-18
  • 1970-01-01
  • 2021-10-12
  • 2019-04-16
  • 2020-10-04
相关资源
最近更新 更多