首页 > 解决方案 > pod/容器名称解析在容器外不起作用

问题描述

我能够将 pod 名称解析为相应容器内的 ip 地址,例如,如果我调用了一个 podelasticsearch-0并通过我进入容器,kubectl exec -it elasticsearch-0 bash我可以执行以下操作:

curl elasticsearch-0:9200

并得到回应:

{
  "name" : "OUvCoFL",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "1Vhf2-pGR0m3e4ezDRAZ0Q",
  "version" : {
    "number" : "6.1.0",
    "build_hash" : "c0c1ba0",
    "build_date" : "2017-12-12T12:32:54.550Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

但是,如果我尝试从不同的容器(例如 kibana-0)中执行此操作,则会失败并显示:

curl: (6) Could not resolve host: elasticsearch-0; Name or service not known

有谁知道我错过了什么?

谢谢

标签: kubernetes

解决方案


服务就是您要寻找的。读这个

Pod 可以配置为与 Service 通信,并且知道与 Service 的通信将自动负载平衡到属于 Service 成员的某个 Pod。

创建服务:

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  ports:
  - port: 9200
    protocol: TCP
  selector:
    app: elasticsearch

并从任何 pod访问服务

curl http://elasticsearch:9200


推荐阅读