kubernetes container内部的主机节点地址(别名还是静态IP?)

2q5ifsrm  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(127)

从container内部寻址主机节点的正确方法是什么?
我有一个驻留在主机节点上的容器,并且该主机节点上运行有Web服务器。容器需要能够访问主机节点上的Web服务器。
我希望找到主机节点的别名,如node.. cluster.local(10.1.111.192),但在文档中找不到。
环境是启用了kubedns的microk 8 s。

可以从节点内部访问分配给calico接口上的主机的地址:10.1.111.192,我在文档中发现可以添加hostalias-pod,因此我可以添加别名,例如node.local(10.1.111.192). https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/
对IP进行硬编码看起来并不优雅,但我是在单节点环境中,所以节点地址不更改也不太可能有关系(节点地址是否会更改?)。这是一个我正在尝试学习的小项目,因此我希望找到最正确的方法来完成此任务。

k4emjkb1

k4emjkb11#

您可以使用downward API获取底层主机名,值得一提的是,它将返回pod运行所在节点的IP

env:
        - name: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP

因此,从Pod内部,您将能够访问特定主机

curl $HOST_IP:8080

完整示例

apiVersion: v1
kind: Pod
metadata:
  name: print-host-ip
spec:
  containers:
    - name: print-host-ip
      image: gcr.io/google_containers/busybox
      env:
        - name: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      command: [ "/bin/sh", "-c", 'echo "host ip is $HOST_IP"' ]

相关问题