Kubernetes 如何在服务中的POD之间进行通信?

Kubernetes 如何在服务中的POD之间进行通信?,kubernetes,Kubernetes,假设我有一个包含两个豆荚的服务。其中一个pod是HTTP服务器,另一个pod需要访问此pod上的REST端点。第二个pod是否有一个主机名可以用来称呼第一个pod?我假设当你说“服务”时,你指的不是服务对象的Kubernetes词典,否则你在服务中的两个pod将是相同的,所以让我们从挑出“服务”在Kubernetes领域的含义开始 您必须创建一个额外的主机名来获取HTTP服务器的Pod。创建服务时将定义一个指向HTTP服务Pod上一组标签的.spec.selector。举个例子,假设标签是app

假设我有一个包含两个豆荚的服务。其中一个pod是HTTP服务器,另一个pod需要访问此pod上的REST端点。第二个pod是否有一个主机名可以用来称呼第一个pod?

我假设当你说“服务”时,你指的不是
服务
对象的Kubernetes词典,否则你在
服务
中的两个pod将是相同的,所以让我们从挑出“服务”在Kubernetes领域的含义开始

您必须创建一个额外的主机名来获取HTTP服务器的
Pod
。创建
服务时
将定义一个指向HTTP服务Pod上一组标签的
.spec.selector
。举个例子,假设标签是
app:nginx
。该
服务
对象的名称将成为可由第二个
Pod
查询的内部DNS记录

一个简化的例子:

apiVersion: v1
kind: Pod
metadata:
  name: http-service
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: my-http-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
现在,您的第二个
Pod
可以通过
服务
名称、
我的HTTP服务
向HTTP服务发出请求


还值得一提的是,Kubernetes的最佳实践规定,出于各种原因(包括应用程序的高可用性),这些
Pod
由s或s等控制器进行管理。

您可以公开Podkubectl expose deployment--type=Pod的名称,然后您可以使用kubectl description来显示端口号。然后你在最后一个命令中访问你的pod…**……希望它能有所帮助。

讽刺的是,你回答了你自己的问题:
服务是一个稳定的名称和IP,它对它将路由流量的
pod
的个人进出进行抽象,如中所述


如果
http pod
需要到达
rest pod
,那么创建一个
服务
,该服务与创建
rest pod
PodSpec
上的标签相匹配,并且从那时起
http pod
可以始终使用
${serviceName}.${serviceNamespace}.svc.cluster.local
到每个具有匹配标签的Pod

注意,服务在Docker中与K8s中是不同的概念。得到你想要的东西最简单的方法就是创建两个豆荚;说出
pod-1
pod-2
,使用类似于此的yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: NAME
  labels:
    app: LABEL
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
假设名称和标签是
nginx
nginx-1
,那么您现在有两个名为
nginx
nginx-1
的pod,标签是
app:nginx
app:nginx-1
。实际上,因为只有一个标签会被曝光,所以另一个标签是不相关的

现在,您可以使用yaml文件或从命令行公开pod

Yaml文件:

apiVersion: v1
kind: Service
metadata:
  name: server
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: nginx
命令行:

apiVersion: v1
kind: Service
metadata:
  name: server
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: nginx
kubectl公开pod nginx——端口80——名称服务器

如果您现在直接访问第二个pod(nginx-1)和
curl
服务,您将最终命中它后面的pod(nginx):


伟大的您是否有关于如何动态更改目的地的idée,即第一个将与另一个新部署的pod通信,谢谢