【问题标题】:pod/container name resolution does not work outside containerspod/容器名称解析在容器外不起作用
【发布时间】:2019-03-15 06:57:01
【问题描述】:

我能够将 pod 名称解析为相应容器内的 ip 地址,例如如果我有一个名为 elasticsearch-0 的 pod,并且我通过 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

有人知道我错过了什么吗?

谢谢

【问题讨论】:

  • 你有service吗?
  • curl elasticsearch-0:9200 在该容器内工作。因为该容器的HOSTNAME 是elasticsearch。跨容器(跨 pod),我们必须使用 service。跨容器(在同一个 pod 中),我们可以使用localhost 连接。

标签: kubernetes


【解决方案1】:

服务就是您要寻找的。阅读this

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

创建服务:

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

还有 access 来自任何 pod 的服务

curl http://elasticsearch:9200

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2014-08-19
    • 2020-07-23
    • 2020-09-11
    • 2021-07-27
    • 1970-01-01
    • 2021-04-10
    • 2022-11-11
    相关资源
    最近更新 更多