【问题标题】:kubernetes Minikube : Node port service not accessible from outsidekubernetes Minikube:无法从外部访问节点端口服务
【发布时间】:2020-07-15 21:20:22
【问题描述】:

我正在尝试在 minikube (Windows-10) 上部署简单的 Spring Boot REST 服务。下面是我的配置

Docker 文件

FROM openjdk:8-jdk-alpine
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/minikube-spring-boot-demo-0.0.1-SNAPSHOT.jar"]
ADD target/minikube-spring-boot-demo-0.0.1-SNAPSHOT.jar  /usr/share/myservice/lib
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/minikube-spring-boot-demo-0.0.1-SNAPSHOT.jar
EXPOSE 8080

docker 镜像运行良好,我可以运行应用程序。

docker run -p 8080:8080 minikube-spring-boot-demo:0.0.1-SNAPSHO

部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: minikube-spring-boot-demo
spec:
  selector:
    matchLabels:
      app: minikube-spring-boot-demo
      tier: backend
  replicas: 3
  template:
    metadata:
      labels:
        app: minikube-spring-boot-demo
        tier: backend
    spec:
      containers:
        - name: demo-backend
          image: nirajsonawane/minikube-spring-boot-demo:0.0.1-SNAPSHOT
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

服务

apiVersion: v1
kind: Service
metadata:
  name: minikube-spring-boot-demo-service
spec:
  selector:
    app: minikube-spring-boot-demo
    tier: backend
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30008
  type: NodePort

kubectl 获取所有状态

kubectl 集群信息

minikube 日志

服务详情

我无法使用service-ip:Nodeport/Uri访问其余端点
http://127.0.0.1:30008/hello

http://172.17.0.2:30008/hello

我在这里缺少什么吗?任何输入都会很有用。

netstat -a的输出

【问题讨论】:

  • 你能检查一下 30001 端口是否在监听吗? netstat -tulpn
  • netstat -a 的更新输出,接受的端口范围是 30000-32767

标签: spring-boot kubernetes minikube


【解决方案1】:

minikube 正在虚拟机中运行。无法通过机器外的localhost127.0.0.1 访问服务。

尝试运行minikube service minikube-spring-boot-demo-service。它将显示服务详细信息并在浏览器中打开服务。

【讨论】:

  • 我尝试使用 servie-ip:port 但它仍然无法正常工作
  • 连接超时,我查看了 pod 的日志。 pod中没有问题
  • 2 个可能的原因可能会导致超时。有一些防火墙规则会将流量头放到 minikube 虚拟机上。或者,主机(Windows 10)上没有路由将流量转发到 minikube 来宾。您可以检查主机路由表和 hyper-v 或 virtualbox 网络设置。
  • 感谢检查。投票率是我寡妇的问题。我需要以管理员身份运行所有命令。这很奇怪
【解决方案2】:

您可以使用以下命令获取集群 ip

kubectl get nodes -o wide

然后在下面运行得到nodeport

kubectl get svc -o wide -n <namespace>

获取 NodePort Svc 的端口

那么您的应用程序将在 http://:port(svc Nodeport ) 上运行

在您的情况下,它可能正在运行 http://127.0.0.1:30008/hello

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2020-09-16
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多