首页 > 解决方案 > Kubernetes Service NodePort 未连接

问题描述

我在 Windows 10 上使用 minikube。我生成 kubernetes NodePort 服务以从客户端 Web 浏览器访问。首先下面的代码是资源配置文件。

apiVersion: v1
kind: Pod
metadata:
  name: blog-system 
  labels:
    app: blog-pod 
spec:
  containers:
  - name: blog-app
    image: app:latest 
    imagePullPolicy: Never 
    ports:
      - containerPort: 8080
    args: ["-t", "-i"]
  - name: blog-mysql
    image: mysql:latest 
    env:
      - name: MYSQL_ROOT_PASSWORD
        value: password
      - name: MYSQL_PASSWORD
        value: password
      - name: MYSQL_DATABASE
        value: test
    ports:
      - containerPort: 3306

---
apiVersion: v1
kind: Service
metadata:
  name: blog-app-svc
spec:
  type: NodePort   
  selector:
    app: blog-pod  
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 80
    nodePort: 31000

Kubernetes Pod 和服务已成功生成。

> kubectl get services
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
blog-app-svc   NodePort    10.100.32.119   <none>        8080:31000/TCP   79s
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP          5m54s

> minikube service blog-app-svc --url
http://192.168.5.25:31000

但是,即使使用所有这些 url,也拒绝访问此 kubernetes nodeport 服务。

http://10.100.32.119:31000
http://10.100.32.119:8080
http://192.168.5.25:31000

我不知道资源配置文件、服务部分或 pod 部分的错误在哪里。请有任何想法。

标签: kubernetesminikubekubernetes-service

解决方案


您的targetPortService 与您的 Pod 不匹配containerPort

您的服务声明表明nodePort集群中任何节点上的 31000 或集群内port特殊主机名上的 8080blog-app-svc.default.svc.cluster.local转发到targetPort某个带有app: blog-pod标签的 pod 中的 80。你有那个 pod,但它正在监听端口 8080 和 3306,而不是端口 80。

如果您交换porttargetPort然后服务上的默认 HTTP 端口 80 将转发到您的 pod 中的端口 8080,这可能就是您所追求的。


推荐阅读