公开Cluster ips以及服务在kubernetes服务中的工作方式?

时间:2018-02-09 23:33:39

标签: 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
  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 ,如何访问它?

非常感谢你。

2 个答案:

答案 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)

#1kubectl 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:4000name of the service:port exposed)。