Spring boot Minikube springboot接收请求并且不';我回答不正确

Spring boot Minikube springboot接收请求并且不';我回答不正确,spring-boot,docker,kubernetes,web-deployment,minikube,Spring Boot,Docker,Kubernetes,Web Deployment,Minikube,我从kubernetes和docker开始,面临一个问题 将springboot应用程序转换为docker映像(使用minikube的docker)后,在minikube上部署了springboot应用程序。。。该应用程序在线并接收请求,正如您在下面的屏幕截图中所看到的,但没有按预期回复 例如,当我正常部署应用程序时(像往常一样在我的计算机上),一切都很好,我可以在所有html页面上运行,但一旦部署到minikube中,它就不会正确响应。(所有工作部件均为弹簧法兰的接收) 用于部署应用程序的YA

我从kubernetes和docker开始,面临一个问题

将springboot应用程序转换为docker映像(使用minikube的docker)后,在minikube上部署了springboot应用程序。。。该应用程序在线并接收请求,正如您在下面的屏幕截图中所看到的,但没有按预期回复

例如,当我正常部署应用程序时(像往常一样在我的计算机上),一切都很好,我可以在所有html页面上运行,但一旦部署到minikube中,它就不会正确响应。(所有工作部件均为弹簧法兰的接收)

用于部署应用程序的YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: esse-deployment-1
  labels:
    app: esse
spec:
  replicas: 1
  selector:
    matchLabels:
      app: esse-1
  template:
    metadata:
      labels:
        app: esse-1
    spec:
      containers:
      - image: mysql:5.7
        name: esse-datasource
        ports:
        - containerPort: 3306
        env: 
          - name: MYSQL_ROOT_PASSWORD
            value: esse_password 
      - image: esse_application
        name: esse-app-1
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
      volumes:
        - name: esse-1-mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-persistent-storage-claim
---

apiVersion: v1
kind: Service
metadata:
  name: esse-service-1
spec:
  selector:
    app: esse-1
  ports:
    - protocol: TCP
      port: 8080
  type: NodePort

----

kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-persistent-storage
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/home/docker/data"

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-persistent-storage-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Mi
要构建映像的Docker文件:

FROM openjdk:8
ADD ESSE_Application.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

我可以看到您有.yml文件来定义部署和服务,但我看不到“入口”。需要一个
kind:Route
的.yml文件来告诉kubernetes应该有一个指向您的服务的外部url;最小入口资源示例:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

**请不要按字面意思理解此代码,我只是尝试在这里起草一些示例代码,可能与您的命名/数据不完全匹配:)

我可以看到您有.yml文件来定义部署和服务,但我看不到“入口”。需要一个
kind:Route
的.yml文件来告诉kubernetes应该有一个指向您的服务的外部url;最小入口资源示例:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

**请不要逐字逐句地理解这段代码,我只是想在这里草拟一些示例代码,可能与您的命名/数据不完全匹配:)

终于解决了问题

一切正常,因为我是从EclipseIDE启动应用程序的,在打包.jar文件时,/webapp/WEB-INF/jsps文件夹中包含的jp文件没有包含在.jar文件中,甚至包括它们都会在
pom.xml
文件中抛出
标记,但这并不能解决问题,因为jar打包不适合jsp文件

我通过在pom.xml文件中添加
war
来修复此问题,以更改打包方法,因为.jsp文件在.war文件中感觉舒适


感谢@Marc的帮助。

终于解决了问题

一切正常,因为我是从EclipseIDE启动应用程序的,在打包.jar文件时,/webapp/WEB-INF/jsps文件夹中包含的jp文件没有包含在.jar文件中,甚至包括它们都会在
pom.xml
文件中抛出
标记,但这并不能解决问题,因为jar打包不适合jsp文件

我通过在pom.xml文件中添加
war
来修复此问题,以更改打包方法,因为.jsp文件在.war文件中感觉舒适


感谢@Marc的帮助。

种类:路线是Kubernetes还是OpenShift特定资源?对不起,我理解minishift!!我的错,那你需要一个入口吗?我不认为有必要使用ingress来避免这个问题,我已经公开了其他应用程序(在kubernetes基础上练习时),并且从未使用过ingress插件,只是通过添加TypeNode类型的服务来公开。。。问题可能出现在其他地方,例如:路线、Kubernetes或OpenShift特定资源?对不起,我理解minishift!!我的错,那你需要一个入口吗?我不认为有必要使用ingress来避免这个问题,我已经公开了其他应用程序(在kubernetes基础上练习时),并且从未使用过ingress插件,只是通过添加TypeNode类型的服务来公开。。。问题可能在其他地方,可能是复制粘贴错误,但服务和PersistentVolume定义之间似乎缺少YAML文档分隔符
--
?是的,很抱歉忘记添加---一旦我复制了YAML代码(这些YAML定义在单独的文件中)如果你做
curl,结果会更好吗http://pod_ip:8080
?通过这种方式,我们应该能够判断问题是来自您的应用程序还是您的服务配置。不,我得到了相同的结果,在minikube内部运行curl(在运行minikube ssh之后),其中172.17.0.4是pod_ip,它给出:{“timestamp”:156444568041,“status”:404,“error”:“Not Found”,“message”:“No message available”,“path”:“/”}。。。但是请注意,当应用程序在我的计算机上运行时,它工作正常:/Ok,因此问题不是来自K8S服务,而是可能来自K8S中的应用程序配置。在K8S中启动应用程序后,您是否检查了spring启动日志?这可能是复制n粘贴错误,但服务和PersistentVolume定义之间似乎缺少YAML文档分隔符
--
?是的,很抱歉,忘记添加了---复制YAML代码后(我将这些YAML定义放在单独的文件中)如果你做
curl,结果会更好吗http://pod_ip:8080
?通过这种方式,我们应该能够判断问题是来自您的应用程序还是您的服务配置。不,我得到了相同的结果,在minikube内部运行curl(在运行minikube ssh之后),其中172.17.0.4是pod_ip,它给出:{“timestamp”:156444568041,“status”:404,“error”:“Not Found”,“message”:“No message available”,“path”:“/”}。。。但是请注意,当应用程序在我的计算机上运行时,它工作正常:/Ok,因此问题不是来自K8S服务,而是可能来自K8S中的应用程序配置。在K8S中启动应用程序后,您是否检查了spring启动日志?