我想了解更多有关服务如何在kubernetes中运作的信息 . 以此示例yaml文件为例 .
apiVersion: v1
kind: Service
metadata:
name: schemaregistry #1
labels:
name: kafka #2
app: demo #3
spec:
ports:
- port: 4000 #4
name: landoopkafkasr #5
targetPort: 8081 #6
selector:
name: landoopkafka #7
app: demo #8
我意识到名称(#7)和应用程序(#8)是在pod中扫描的东西,以匹配在landoopkafka(#7)pod上暴露的targetPort上暴露的服务 . 如果我是,请纠正我错误 .
基本上,我的理解是这个服务将暴露 port 8081 的pod landoopkafka
我的问题是#1,#2,#3和#4的重要性是什么?
如果我必须从k8集群中的 different pod B 访问Pod landoopkafka 的 port 8081 ,我该如何访问它?
非常感谢 .
2 回答
您可以从这些获得有关Kubernetes服务的基本信息
service-networking
expose-intro
简而言之
让我们看看Pod
现在,你服务
这里,以下是匹配Pod的标签选择器
这里,
metadata.name
(1)名称主要用于创建幂等性和配置定义 . 这是一个必填字段 .metadata.labels
(2,3)可用于组织和分类的字符串键和值的映射 . 此标签可用于列出服务 .spec.ports[*].port
(4)此服务将公开的端口 . (如果要使用此服务访问Pod,则需要使用此端口,而不是Pod的端口)spec.ports[*].name
(5)服务中此端口的名称spec.ports[*].targetPort
(6)服务所针对的容器上要访问的端口的编号或名称 . (如果你不提供这个,端口将被用作targetPort)spec.selector
(7,8)将服务流量路由到具有标签键和与此选择器匹配的值的pod . (此 Map 将与Pod标签匹配)根据我提供的示例,如果要访问Pod
landoopkafka
,可以使用服务DNS作为您的服务通过端口
4000
(#4)公开,这些流量将路由到Pod的8081
(#6)端口#1
是在kubectl show services
的输出中看到的服务本身的名称 .#2
和#3
是可由其他kubernetes资源匹配/选择并用于列出服务的服务标签:kubectl get service -l name=kafka
和kubectl get service -l app=demo
#4
是服务公开的端口4000
,可用于访问后端pod .kubernetes中的服务发现使用DNS(
Kube-dns
)完成 . 因此,群集中的另一个podpod B
可以使用服务名称访问podlandoopkafka
:schemaregistry:4000
(name of the service:port exposed
) .