如何使一个kubernetes服务与另一个kubernetes服务对话?
我有两个服务(客户机和服务器),这两种类型的负载平衡器。我想让客户机服务与服务器服务对话。如何以编程方式(通过yaml文件等)执行 更明确地说,客户机运行一个python代码,需要访问服务器的外部ip。但是,我只知道服务器服务名称,不知道外部ip 当然,解决这个问题的一种方法是首先启动服务器,获取外部ip并将其添加到客户机的yaml文件中。我正在寻找一种解决方案,比如只需知道服务名称就可以访问外部ip 客户机和服务器位于同一kubernetes集群中 Client.yaml客户端运行一个web服务器,如果有人点击了web服务器发布的url如何使一个kubernetes服务与另一个kubernetes服务对话?,kubernetes,kubernetes-service,Kubernetes,Kubernetes Service,我有两个服务(客户机和服务器),这两种类型的负载平衡器。我想让客户机服务与服务器服务对话。如何以编程方式(通过yaml文件等)执行 更明确地说,客户机运行一个python代码,需要访问服务器的外部ip。但是,我只知道服务器服务名称,不知道外部ip 当然,解决这个问题的一种方法是首先启动服务器,获取外部ip并将其添加到客户机的yaml文件中。我正在寻找一种解决方案,比如只需知道服务名称就可以访问外部ip 客户机和服务器位于同一kubernetes集群中 Client.yaml客户端运行一个web服
demo.py
应该调用服务器的服务。我正在考虑一种方法,在这里以编程方式获取服务器的外部ip
,但是我愿意听取建议
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name:client-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: client
spec:
containers:
- name: client-container
image: client_image:latest
command:
- "python"
- "/root/demo.py"
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
labels:
run: client-service
name: client-service
spec:
ports:
- port: 5000
targetPort: 5000
selector:
app: inception-client
type: LoadBalancer
Server.yaml:它在端口9000公开一个服务,客户端应该调用该端口
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: server-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: server
spec:
containers:
- name: server-container
image: server_image:latest
command:
- <Command to start a server which listens on port 9000>
ports:
- containerPort: 9000
---
apiVersion: v1
kind: Service
metadata:
labels:
run: server-service
name: server-service
spec:
ports:
- port: 9000
targetPort: 9000
selector:
app: server
type: LoadBalancer
apiVersion:extensions/v1beta1
种类:部署
元数据:
名称:服务器部署
规格:
副本:3份
模板:
元数据:
标签:
应用程序:服务器
规格:
容器:
-名称:服务器容器
图像:服务器\u图像:最新
命令:
-
端口:
-集装箱港口:9000
---
版本:v1
种类:服务
元数据:
标签:
运行:服务器服务
名称:服务器服务
规格:
端口:
-港口:9000
目标港:9000
选择器:
应用程序:服务器
类型:负载平衡器
客户端只需要知道链接到服务器的kubernetes服务名称。Kubernetes将处理到所需服务器机架的路由。指定负载平衡器也会隐式创建集群。您的客户端python应用程序可以使用它
您可以在客户端代码中提供一个准备就绪的探测器,它检查服务器是否已启动,这样您可以确保当服务器准备好时,客户端也可以开始接受请求。
< P>正如您没有指定服务器驻留的位置一样,请考虑这两种情况。 案例1:服务在同一集群中 使用服务名称代替主机ip地址。kube代理将服务名称转换为ip地址(内部) 案例2:服务不在同一集群中 在它们之间建立连接需要一个外部IP地址。另一种方法是编写bash脚本。 编写bash脚本以编程方式获取ip地址并将其存储在变量中。在服务器yaml文件中替换此变量您的“服务器”服务是否需要从“客户端”服务以外的任何地方访问,或者您的“服务器”服务是否与“客户端”服务以外的任何其他人通信?服务器的服务也可以从其他人处访问,如通过CLI等。我想问的是,如果该“服务器”服务也在集群外使用,因为如果不是,我们就不需要服务类型的负载平衡器,我们可以通过服务名称直接访问它,正如其他人在回答中提到的那样。是的,您可以直接执行ClusterIP:9000,或者通过“客户端”服务。如果两个服务位于不同的命名空间中,则“即使服务类型为';节点端口';或';负载平衡器'^注释,即“服务器服务:9000”也可以用于设置livenessProbe,ReadinesProbe在kubernetes中有很好的文档记录。你的应用程序是如何在这些内部运行的,这完全取决于你自己。