微服务部署在 kubernetes 上,但没有给出预期的结果
Posted
技术标签:
【中文标题】微服务部署在 kubernetes 上,但没有给出预期的结果【英文标题】:Microservice deloyed on kubernetes but not giving the desired result 【发布时间】:2020-07-10 02:55:06 【问题描述】:我已经在google kubernetes云引擎上成功部署了一个微服务[spring app],但是endpoint不工作了。
Dockerfile
deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-management-deployment
labels:
app: happy-paws
spec:
replicas: 3
selector:
matchLabels:
name: user-management-deployment
app: happy-paws
template:
metadata:
name: user-management-deployment
labels:
name: user-management-deployment
app: happy-paws
spec:
containers:
- name: user-management
image: docker/user-management
ports:
- containerPort: 9106
Service.yml
apiVersion: v1
kind: Service
metadata:
name: user-management
labels:
name: user-management-service
app: happy-paws
spec:
type: LoadBalancer
ports:
- port: 9106
targetPort: 9106
selector:
name: user-management-pod
app: happy-paws
application.properties 请帮助我理解问题。
更新:
更新端口后,应用程序开始工作
已启动的服务: 用户订单详细信息负载均衡器 Kubernetes ClusterIP 订单管理负载均衡器 用户管理负载均衡器
user-order-detail 命中端点以检索所有用户。我收到此错误:虚拟主机名没有匹配项:用户管理**
String url = "user-management/user";
InstanceInfo instance = eurekaClient.getNextServerFromEureka("user-management", false);
Object response = restTemplate.getForObject(instance.getHomePageUrl() + url +"/" + userId, Object.class);
【问题讨论】:
您的服务转发到哪个 tcp 端口? 在您的服务中将负载均衡器中的目标端口更改为 9106 节点端口-31659 目标端口-80 @NimitJohri 那么端口的值呢? 更改您的服务 yaml 使其端口号与您的应用程序运行的端口相同 【参考方案1】:尝试理解服务在 Kubernetes 术语中的含义。在高层次上,这可以解释为一种将在容器内运行的应用程序(在容器内运行(在网络内运行))暴露给外部世界的方法。
每个区块都可以拥有自己的独立网络。因此引入了服务的概念。通过这种方式,您可以公开容器的哪个端口需要向世界公开以及需要如何公开(服务类型,在您的情况下是 LoadBalancer)。
因此,如果您需要访问在容器内的端口 9106 上运行的应用程序,则需要公开该端口。
spec:
type: LoadBalancer
ports:
- port: 9106
targetPort: 9106
【讨论】:
我正在尝试从内部调用休息服务。它不起作用。知道为什么我无法执行服务间通信 你在里面是什么意思? 还有一个服务通过一个rest端点访问用户管理服务。我已经将它部署在 kubernetes 上,但无法访问其余端点 虚拟主机名没有匹配项:user-management 我收到此错误 我猜这是因为尤里卡的到来。你需要检查一下【参考方案2】:尝试将所有端口更改为 9106
【讨论】:
以上是关于微服务部署在 kubernetes 上,但没有给出预期的结果的主要内容,如果未能解决你的问题,请参考以下文章