我想了解更多有关服务如何在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上暴露的服务。请更正我如果我错了。
基本上,我的理解是此服务会公开广告 landoopkafka 的 端口8081
我的问题是#1,#2,#3和#4的意义是什么?
如果我必须从 <访问Pod landoopkafka 的 端口8081 k8群集中的em>不同的pod B ,如何访问它?
非常感谢你。
答案 0 :(得分:1)
您可以从这些
获取有关Kubernetes服务的基本信息简短地告诉你
让我们看看Pod
apiVersion: v1
kind: Pod
metadata:
name: landoopkafka
labels:
name: landoopkafka
app: demo
spec:
containers:
- name: kafka
image: kafka:1.7.9
ports:
- containerPort: 8081
此服务可以定位服务(通常)由Label Selector
确定
现在,你服务
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
以下是匹配Pod
的标签选择器 selector:
name: landoopkafka #7
app: demo #8
下面,
metadata.name
(1)名称主要用于创建幂等性和配置定义。它是必填字段。metadata.labels
(2,3)可用于组织和分类的字符串键和值的映射。此标签可用于列出服务。spec.ports[*].port
(4)此服务将公开的端口。 (如果您想使用此服务访问Pod,则需要使用此端口,而不是Pod的端口)spec.ports[*].name
(5)服务中此端口的名称spec.ports[*].targetPort
(6)要在服务所定位的pod上访问的端口的编号或名称。 (如果不提供此功能,端口将用作targetPort)spec.selector
(7,8)将服务流量路由到具有标签键和与此选择器匹配的值的广告连播。 (此地图将与Pod标签匹配)根据我提供的示例,如果您想访问Pod landoopkafka
,可以使用服务DNS作为
schemaregistry:4000
您的服务以端口4000
(#4)公开,这些流量将路由到Pod的8081
(#6)端口
答案 1 :(得分:0)
#1
是kubectl show services
输出中显示的服务名称。
#2
和#3
是服务的标签,可由其他kubernetes资源匹配/选择,并用于列出服务:
kubectl get service -l name=kafka
和
kubectl get service -l app=demo
#4
是服务公开的端口4000
,可用于访问后端pod。
如果我必须从k8集群中的另一个pod B访问Pod landoopkafka的端口8081,我该如何访问它?
kubernetes中的服务发现是使用DNS(Kube-dns
)完成的。因此,群集中的其他广告pod B
可以使用服务名称访问广告landoopkafka
:
schemaregistry:4000
(name of the service:port exposed
)。