公开集群IP以及服务在kubernetes服务中的工作方式?

公开集群IP以及服务在kubernetes服务中的工作方式?,kubernetes,Kubernetes,我试图了解更多关于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 sel

我试图了解更多关于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中扫描的内容,以匹配Landoop Kafka(#7)pod上暴露的targetPort上暴露的服务。如果我错了,请纠正我

基本上,我的理解是该服务将公开pod的端口8081

我的问题是#1、#2、#3和#4的意义是什么

另外,如果我必须从k8集群中的不同Pod B访问PodLandoop Kafka端口8081,我如何访问它


非常感谢。

您可以从这些网站获得有关Kubernetes服务的基本信息

简而言之

让我们看看吊舱

apiVersion: v1
kind: Pod
metadata:
  name: landoopkafka
  labels:
    name: landoopkafka
    app: demo
spec:
  containers:
  - name: kafka
    image: kafka:1.7.9
    ports:
    - containerPort: 8081
该Pod可以由(通常)由用户确定的服务作为目标

现在,你来服务吧

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)name主要用于创建幂等和配置定义。这是必填字段
  • 元数据。标签
    (2,3)可用于组织和分类的字符串键和值的映射。此标签可用于列出服务
  • spec.port[*]。port
    (4)此服务将公开的端口。(如果您想使用此服务访问Pod,则需要使用此端口,而不是Pod的端口)
  • spec.port[*].name
    (5)服务中此端口的名称
  • spec.ports[*].targetPort
    (6)服务目标POD上要访问的端口的编号或名称。(如果您不提供此选项,端口将用作targetPort)
  • spec.selector
    (7,8)使用与此选择器匹配的标签键和值将服务流量路由到POD。(此地图将与Pod标签匹配)
根据我提供的示例,如果您想访问Pod
landoopkafka
,您可以使用服务DNS作为

schemaregistry:4000
您的服务通过端口
4000
(#4)公开,这些流量将路由到Pod的
8081
(#6)端口
1
是在
kubectl show services
的输出中看到的服务本身的名称

#2
#3
是服务的标签,可由其他kubernetes资源匹配/选择,并用于使用以下内容列出服务:

kubectl获取服务-l name=kafka

kubectl获取服务-l app=demo

#4
是服务公开的端口
4000
,可用于访问后端吊舱

另外,如果我必须从k8集群中的另一个Pod B访问Pod landoopkafka的8081端口,我如何访问它

kubernetes中的服务发现是使用DNS(
Kube DNS
)完成的。因此,集群中不同的pod
pod B
可以使用服务名称访问pod
landoopkafka


schemaregistry:4000
服务名称:端口公开
)。

非常感谢您详尽的回答!我真的很感激。它确实对我有用!