Kubernetes服务NodePort未连接

时间:2020-03-28 08:36:38

标签: kubernetes minikube kubernetes-service

我在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容器和服务已成功生成。

> 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部分上。任何想法,请。

2 个答案:

答案 0 :(得分:3)

您的服务的targetPort与您的Pod的containerPort不匹配。

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

如果交换porttargetPort,则服务上的默认HTTP端口80将转发到pod中的端口8080,这很可能就是您想要的。

答案 1 :(得分:0)

看来您的NodePort的配置正确。有关故障排除的一些建议是,这可能是由Kubernetes Worker节点上运行的防火墙引起的。

因此,请确保31000已打开,并且您应该能够从Kubernetes API服务器解析该IP。

其次,您应该考虑向群集中添加一个LoadBalancer controller,这样就不必使用NodePorts。除了调试以外,它们并没有真正的用途。