Spring Cloud Gateway集成Kubernetes服务发现:discovery-server-url配置疑问
解决Spring Cloud Gateway + Minikube服务发现配置问题
错误原因
你的应用在本地开发环境运行(而非Minikube集群内部),Spring Cloud Kubernetes无法自动获取Kubernetes API Server的地址和认证信息,因此必须显式配置spring.cloud.kubernetes.discovery.discovery-server-url及相关认证参数。
Minikube环境下的配置步骤
1. 获取Kubernetes API Server地址
执行以下命令获取Minikube集群的IP:
minikube ip
将得到的IP拼接成API Server地址:https://<minikube-ip>:8443(Minikube默认API Server端口为8443)
2. 获取认证所需的证书和Token
- CA证书路径:Minikube的CA证书默认存储在本地路径:
- Linux/macOS:
~/.minikube/ca.crt - Windows:
%USERPROFILE%\.minikube\ca.crt
- Linux/macOS:
- Token:打开本地的
~/.kube/config文件,找到users节点下的user.token字段,复制其值即可。
3. 更新application.yaml配置
在spring.cloud.kubernetes.discovery节点下添加以下配置:
spring: application.name: gateway cloud: kubernetes: discovery: enabled: true all-namespaces: false include-not-ready-addresses: true discovery-server-url: https://<你的minikube-ip>:8443 cert-file: ~/.minikube/ca.crt token: <你的kubeconfig中的token值> gateway: discovery: locator: enabled: true lowerCaseServiceId: true
额外说明
当你将应用部署到Minikube集群内部时,这些discovery-server-url、cert-file、token配置可以移除,Spring Cloud Kubernetes会自动通过集群内的服务账户获取API Server访问权限。
另外,注意你的依赖版本兼容性:Spring Cloud Kubernetes 1.1.5.RELEASE与Spring Cloud 2021.0.6(Jubilee)是匹配的,但spring-cloud-starter-kubernetes-ribbon属于较旧的负载均衡实现,若后续遇到负载均衡问题,可考虑仅保留spring-cloud-starter-loadbalancer即可。
内容的提问来源于stack exchange,提问作者Dushan
相关产品推荐
相关产品推荐

