首页 文章

公开Cluster ips以及服务如何在kubernetes服务中运行?

提问于
浏览
0

我想了解更多有关服务如何在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 landoopkafkaport 8081 ,我该如何访问它?

非常感谢 .

2 回答

  • 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
    

    服务可以定位此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)名称主要用于创建幂等性和配置定义 . 这是一个必填字段 .

    • 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作为

    schemaregistry:4000
    

    您的服务通过端口 4000 (#4)公开,这些流量将路由到Pod的 8081 (#6)端口

  • 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 pod B 可以使用服务名称访问pod landoopkafka

    schemaregistry:4000name of the service:port exposed ) .

相关问题