Spring boot Kubernetes发现定位器上的Spring云网关使用pod端口而不是o服务端口
我正在openshift上使用SpringCloudGateway和SpringCloudKubernetes发现实现一个API网关 我从项目开始 我的网关配置是:Spring boot Kubernetes发现定位器上的Spring云网关使用pod端口而不是o服务端口,spring-boot,kubernetes,spring-cloud,spring-cloud-kubernetes,Spring Boot,Kubernetes,Spring Cloud,Spring Cloud Kubernetes,我正在openshift上使用SpringCloudGateway和SpringCloudKubernetes发现实现一个API网关 我从项目开始 我的网关配置是: cloud: gateway: discovery: locator: enabled: true url-expression: "'http://'+serviceId+':'+port" kubernetes: reload:
cloud:
gateway:
discovery:
locator:
enabled: true
url-expression: "'http://'+serviceId+':'+port"
kubernetes:
reload:
enabled: true
mode: polling
period: 5000
discovery:
service-labels:
type: "java-api"
当我查看我的/执行器/网关/路由时,我可以看到发现的服务:
{
"predicate":"Paths: [/common/**], match trailing slash: true",
"route_id":"ReactiveCompositeDiscoveryClient_common",
"filters":[
"[[RewritePath /common/(?<remaining>.*) = '/${remaining}'], order = 1]"
],
"uri":"http://common:8085",
"order":0
}
为了让API网关工作,我必须对齐pod端口和服务端口,但这听起来很奇怪。正在使用Ribbon吗?Ribbon的默认
spring.cloud.kubernetes.Ribbon.mode
为POD。摘自(引文):
spring.cloud.kubernetes.ribbon.mode
支持POD
和SERVICE
模式
模式是通过获取POD IP来实现负载平衡 Kubernetes的地址和使用功能区。POD模式使用负载 功能区的平衡不支持Kubernetes负载平衡, 不支持Istio的流量策略POD
模式直接基于功能区的服务名称。 将Kubernetes服务连接到服务
例如:服务名称。{namespace}.svc.{cluster.domain}:{port}
。demo1.default.svc.cluster.local:8080
模式使用负载 平衡Kubernetes服务以支持Istio的流量策略服务
正在使用丝带吗?Ribbon的默认
spring.cloud.kubernetes.Ribbon.mode
为POD。摘自(引文):
spring.cloud.kubernetes.ribbon.mode
支持POD
和SERVICE
模式
模式是通过获取POD IP来实现负载平衡 Kubernetes的地址和使用功能区。POD模式使用负载 功能区的平衡不支持Kubernetes负载平衡, 不支持Istio的流量策略POD
模式直接基于功能区的服务名称。 将Kubernetes服务连接到服务
例如:服务名称。{namespace}.svc.{cluster.domain}:{port}
。demo1.default.svc.cluster.local:8080
模式使用负载 平衡Kubernetes服务以支持Istio的流量策略服务
为什么您不能简单地将
服务端口(port)
设置为8085
,以便它公开与Pod
相同的端口?实际上,没有什么能阻止你这么做
当我试图通过网关调用RESTAPI时,我得到
There was an unexpected error (type=Internal Server Error, status=500). finishConnect(..) failed: Host is unreachable: common/172.30.7.24:8085
服务是
Name: common Type: ClusterIP IP: 172.30.7.24 Port: <unset> 8080/TCP TargetPort: 8085/TCP Endpoints: 10.129.3.101:8085
如果有帮助,请告诉我。为什么您不能简单地将
服务端口(端口)
设置为8085
,这样它就可以显示与Pod
相同的端口?实际上,没有什么能阻止你这么做
当我试图通过网关调用RESTAPI时,我得到
There was an unexpected error (type=Internal Server Error, status=500). finishConnect(..) failed: Host is unreachable: common/172.30.7.24:8085
服务是
Name: common Type: ClusterIP IP: 172.30.7.24 Port: <unset> 8080/TCP TargetPort: 8085/TCP Endpoints: 10.129.3.101:8085
如果有帮助,请告诉我。当我尝试通过网关调用rest api时,我发现
出现意外错误(type=Internal Server error,status=500)。finishConnect(..)失败:主机无法访问:公用/172.30.7.24:8085
且服务为名称:公用类型:群集IP:172.30.7.24端口:8080/TCP目标端口:8085/TCP端点:10.129.3.101:8085
似乎使用了服务IP和pod端口。我还添加了spring.cloud.kubernetes.ribbon.mode=SERVICE
,但没有任何更改。当我尝试通过网关调用rest api时,我发现出现了一个意外错误(type=Internal Server error,status=500)。finishConnect(..)失败:主机无法访问:公用/172.30.7.24:8085
且服务为名称:公用类型:群集IP:172.30.7.24端口:8080/TCP目标端口:8085/TCP端点:10.129.3.101:8085
似乎使用了服务IP和pod端口。我还添加了spring.cloud.kubernetes.ribbon.mode=SERVICE
,但没有任何变化。这正是问题的结尾:“……为了让API网关工作,我必须对齐pod端口和服务端口,但听起来很奇怪”。是的,我注意到了这一点,我想问为什么听起来很奇怪,因为对我来说,通过服务公开api客户机期望的正确端口并不奇怪?你能解释一下吗?不,我不能解释。我想这可能是一个bug,但还没有机会研究代码(很久以前有多个端口出现问题-如果我记得的话,只有第一个端口被选中)。因此,将端口
和目标端口
设置为相同可能是一个解决办法,我同意。问题就是这样结束的:“……为了让API网关工作,我必须对齐pod端口和服务端口,但听起来很奇怪”。是的,我注意到了这一点,我想问为什么听起来很奇怪,因为对我来说,通过服务公开api客户机期望的正确端口并不奇怪?你能解释一下吗?不,我不能解释。我想这可能是一个bug,但还没有机会研究代码(很久以前有多个端口出现问题-如果我记得的话,只有第一个端口被选中)。所以,将端口
和目标端口
设置为相同可能是一个解决方法,我同意。您好,您解决问题了吗?当有多个实例(pod)时,我会出现相同的错误,但当有一个pod时,我不会出错。嗨,我对齐了pod端口和服务端口。每个容器都以“-Dserver.port=8080”启动spring引导。您好,您解决问题了吗?当有多个实例(pod)时,我会出现相同的错误,但当有一个pod时,我不会出错。嗨,我对齐了pod端口和服务端口。每个容器都以“-Dserver.port=8080”启动spring引导。