【问题标题】:Kubernetes Service Nodeport is not workingKubernetes 服务节点端口不工作
【发布时间】:2020-09-25 01:09:24
【问题描述】:

我创建了两个在 Windows 10 的 minikube 环境中运行的 POD。一个带有 Spring Boot 应用程序容器的 POD 和另一个带有 mysql 容器的 POD。对于 Spring Boot 应用程序 POD,服务类型为 nodePort,对于 MYSQL pod,服务类型为 clusterIP。意味着 Mysql pod 只需要在集群内部进行通信。但是对于 Spring Boot 应用程序需要从浏览器访问,所以我配置了 NodePort。

我为 NodePort 配置了 30096。但我检查了我的浏览器(minikube ip:nodePort)。它不工作。所以我尝试执行命令“minikube service service-name”并输出显示一个不同的端口(59870)

MYSQL_DEPLOYMENT_YML:

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: bcp-mysql
  labels:
    app: bcp-mysql
spec:
  selector:
    matchLabels:
      app: bcp-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: bcp-mysql
    spec:
      containers:
      - image: <myrepo>/mysql:5.7
        name: mysql
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: password
          - name: MYSQL_DATABASE
            value: database
          - name: MYSQL_USER
            value: root
          - name: MYSQL_PASSWORD
            value: password
        ports:
        - containerPort: 3306
          name: mysql
        imagePullPolicy: Always
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
      imagePullSecrets:
        - name: regcred
---
apiVersion: v1
kind: Service
metadata:
  name: bcp-mysql
spec:
  selector:
    app: bcp-mysql
  ports:
    - port: 3306
      targetPort: 3306
  type: ClusterIP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: bcp-mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Spring_boot_deployment.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bcpdashboard
  labels: 
    app: bcpdashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bcpdashboard
  template:
    metadata:
      labels:
        app: bcpdashboard
    spec:
      containers:
        - name: app
          image: <myrepo>/bcpdashboard:latest
          ports:
            - containerPort: 9097
          imagePullPolicy: Always
          env:
          - name: SPRING_DATASOURCE_URL
            value: jdbc:mysql://bcp-mysql:3306/bcp?autoReconnect=true&useSSL=false
      imagePullSecrets:
        - name: regcred
---

apiVersion: v1  
kind: Service  
metadata:  
  name: bcpdashboard  
spec:
  selector:
    app: bcpdashboard
  ports:
    - port: 9097
      targetPort: 9097
      nodePort: 30096
  type: NodePort
---

我的 minikube ip 只是 localhost IP。所以我尝试运行(http://127.0.0.1:30096)。它不工作。所以我尝试执行“minikube service bcpdashboard”

http://127.0.0.1:59870/ 工作正常,我不知道端口号 59870。即使我配置了 nodeport,它是如何自动分配的,并且是 Spring Boot 应用程序 POD 的起点。

任何人都面临同样的问题&请告诉我如何使它与 nodePort 一起工作,以及部署 yaml 配置中是否有任何问题。

【问题讨论】:

  • 你能检查minikube iphttp://&lt;minikube ip&gt;:30096是否有效吗?
  • 我的 minikube ip 是 127.0.0.1,它不适用于 nodePort(30096)
  • 你试过运行kubectl get svcminikube service bcpdashboard --url吗?这些打印什么?
  • @stackguy - 我附上了截图。请检查一下
  • 默认情况下,将自动分配给集群的nodePort在30000-32767范围内。您是否对集群配置进行了任何更改以更改此范围?

标签: java spring-boot docker kubernetes minikube


【解决方案1】:

似乎该行为特定于您的 minikube 设置,在我的设置中使用您的部署 yaml,一切都按照说明运行,即只有 curl http://127.0.0.1:30096/ 响应 200。

我使用helloworld-http 作为镜像,使用 k8s 16 w/docker-desktop 2.3。部署 yaml 看起来是这样的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bcpdashboard
  labels:
    app: bcpdashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bcpdashboard
  template:
    metadata:
      labels:
        app: bcpdashboard
    spec:
      containers:
        - name: app
          image: strm/helloworld-http
          ports:
            - containerPort: 80
          imagePullPolicy: Always
          env:
          - name: SPRING_DATASOURCE_URL
            value: jdbc:mysql://bcp-mysql:3306/bcp?autoReconnect=true&useSSL=false
      imagePullSecrets:
        - name: regcred
---

apiVersion: v1
kind: Service
metadata:
  name: bcpdashboard
spec:
  selector:
    app: bcpdashboard
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30096
  type: NodePort
---

您是否尝试过使用 docker-windows-desktop-kubernetes ?您可以尝试一下,它至少会为您解决问题。

【讨论】:

  • 谢谢。我将尝试在另一台机器上与桌面 kubernetes 一起进行相同的设置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 2019-02-18
  • 2020-07-15
  • 2019-06-22
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多