gpt4 book ai didi

spring-boot - 在 Kubernetes 上部署 Spring Boot 应用程序 : App uses wrong port property from environment variable

转载 作者:行者123 更新时间:2023-12-02 11:58:36 25 4
gpt4 key购买 nike

我正在尝试在 Kubernetes (Minikube) 上部署“Hello world”Spring Boot 应用程序。该应用程序非常简单,只有一种方法,映射到 GET 资源上。我什至没有指定端口。

我现在正尝试在 Minikube 上部署该应用程序,并使用服务使其可用:

kind: Service
apiVersion: v1
metadata:
name: server
spec:
selector:
app: server
ports:
- protocol: TCP
port: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: server
spec:
selector:
matchLabels:
app: server
replicas: 3
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: kubernetes-server:latest
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080

如果我使用此配置启动部署(即先启动服务,然后启动部署),Pod 在启动期间会失败。在日志中,我可以找到以下消息:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target
org.springframework.boot.autoconfigure.web.ServerProperties@42f93a98 failed:

Property: server.port
Value: tcp://10.98.151.181:8080
Reason: Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'port'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [java.lang.Integer]

注意:10.98.151.181 是 Service 的集群 IP,在 Minikube 仪表板中可以看到。

如果我首先触发实际的 Deployment,应用程序会成功启动,之后我就可以启动服务了。不过官方文档建议先启动服务,再部署:https://kubernetes.io/docs/concepts/configuration/overview/#services

对我来说,服务似乎将属性 server.port 设置为环境变量,而在服务之后启动的 Spring Boot 应用程序意外地将其解释为 Spring 服务器.端口

有什么解决办法吗?

最佳答案

For me, it looks like the Service sets a property server.port as environment variable

不,kubernetes 它正在暴露“docker 兼容”link env-vars其中,因为您的 Service 被命名为 server,所以最终成为 SERVER_PORT=tcp://thing:8080 因为它试图“提供帮助” "

解决方案是为您的 Service 起一个更具描述性的名称,或者屏蔽掉有问题的 env-var:

containers:
- name: server
env:
- name: SERVER_PORT
value: '' # you can try the empty string,
# or actually place the port value with
# value: '8080'
# ensure it is a **string** and not `value: 8080`

关于spring-boot - 在 Kubernetes 上部署 Spring Boot 应用程序 : App uses wrong port property from environment variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49394390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com