从另一个pod kubernetes访问pod

问题描述 投票:0回答:2

我创建了2个pod。一个是grafana,另一个是流入pod。我需要在grafana中配置涌入。我确实看到了下面的例子。我对它的配置方式感到有点困惑。以下是部署和服务文件。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: influxdb
  labels:
    app: influxdb
spec:
  template:
    metadata:
      labels:
        app: influxdb
    spec:
      containers:
      - name: influxdb
        image: influxdb
        ports:
        - containerPort: 8083
          name: admin
        - containerPort: 8086
          name: http
        resources:
          limits:
            memory: 2048Mi
            cpu: 100m  
        volumeMounts:
        - name: influxdb-data
          mountPath: /var/lib/influxdb
      volumes:
      - name: influxdb-data
        persistentVolumeClaim:
          claimName: influxdb-pvc-vol

服务文件

apiVersion: v1
kind: Service
metadata:
  name: influxdb
  labels:
    app: influxdb
spec:
  ports:
    - port: 3306
  selector:
    app: influxdb
  clusterIP: None

clusterIP: None做什么?他暴露了3306端口并将其映射到节点端口3306.所以我相信我可以使用3306端口及其IP从其他pod访问。但在这里,我看到我能够通过http://influxdb:8086访问我怎么能通过http://influxdb:8086访问?

kubernetes
2个回答
1
投票

我可以解释发生了什么以及为什么会这样,但我仍然认为这种配置没有意义。

部署创建一个Pod,它运行InfluxDB,默认情况下在端口8086上进行监听。这里的containerPort纯信息,请参阅Pod spec reference中的以下内容:

主要是信息性的。此处未指定端口不会阻止该端口暴露。任何正在侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。

现在到服务,这是使用端口3306创建的,这是奇怪的,但在这种情况下无关紧要,因为这是一个Headless Service。无头服务是一种告诉Kubernetes您不希望它具有花哨的网络功能(如kube-proxy负载平衡)的方法,而只是您希望它为您创建DNS记录。通过指定ClusterIP: None,你基本上可以使它成为无头服务。鉴于此服务实际上并未为任何流量提供服务,此处的“端口”字段无意义。

现在让我们回顾一下访问http://influxdb:8086时会发生什么:

  1. 您的http客户端将主机influxdb解析为Pod IP。这可以归功于无头服务。请再次注意,主机解析为Pod IP,而不是服务IP。
  2. 由于Pod在8086上服务,并且由于您直接通过它的私有IP到达它,它接受您的请求并且您有回复。

0
投票

定义ClusterIP:none的服务称为headless service

对于定义选择器的无头服务,端点控制器在API中创建端点记录,并修改DNS配置以返回直接指向支持服务的Pod的A记录(地址)

由于只有一个Influxdb pod,因此无需对其进行负载平衡,因此不需要服务代理,请求将直接路由到pod。

© www.soinside.com 2019 - 2024. All rights reserved.