如何将pod所在的主机IP地址,以变量的方式注入到容器当中? (downward API)

1、概述

 

我们知道,当pod被成功调度之后,当查看pod的状态的时候,就会看到pod的IP地址,和pod所在主机的IP地址,如下图所示:

[root@nccztsjb-node-23 ~]# kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP               NODE               NOMINATED NODE   READINESS GATES
nginx-ds-lw4vj              1/1     Running   0          10d     172.39.21.91     nccztsjb-node-25   <none>           <none>
nginx-ds-nrf4t              1/1     Running   0          10d     172.39.209.108   nccztsjb-node-23   <none>           <none>
nginx-ds-zlw6f              1/1     Running   0          2d23h   172.39.157.203   nccztsjb-node-24   <none>           <none>
nginx-test-56745657-cdwn2   1/1     Running   0          3d23h   172.39.209.110   nccztsjb-node-23   <none>           <none>
nginx-test-56745657-cfss5   1/1     Running   0          3d23h   172.39.209.112   nccztsjb-node-23   <none>           <none>
nginx-test-56745657-h5hbn   1/1     Running   0          3d23h   172.39.209.111   nccztsjb-node-23   <none>           <none>
nginx-test-56745657-m6hm4   1/1     Running   0          10d     172.39.21.90     nccztsjb-node-25   <none>           <none>
nginx-test-56745657-pqhqp   1/1     Running   0          10d     172.39.21.93     nccztsjb-node-25   <none>           <none>
[root@nccztsjb-node-23 ~]# 

 

那么,如果在容器的内部,想要知道pod的ip和pod所在的节点的ip,该怎么做呢?

 

OK,在本文中,我们就会介绍,如何通过变量注入的方式,获得pod的状态中的一些信息,然后变成pod的变量,供其中的容器来进行使用

 

2、将pod的信息注入为环境变量

 

比如,我们想要将pod启动后,所在的节点的信息注入为容器的环境变量,可以通过以下的方式

 

增加环境变量到yaml配置文件中(已经运行的,可以通过kubectl edit来进行修改)

 

        env:
        - name: INSTANCE_HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      dnsPolicy: ClusterFirst
      restartPolicy: Always

 

重新应用yaml配置文件

 

查看pod的状态

 

[root@nccztsjb-node-23 ~]# kubectl get pod -l app=nginx-taints
NAME                            READY   STATUS    RESTARTS   AGE
nginx-taints-549f6d97ff-6p7nj   1/1     Running   0          28s
nginx-taints-549f6d97ff-7thxm   1/1     Running   0          28s
nginx-taints-549f6d97ff-8h4zj   1/1     Running   0          28s
nginx-taints-549f6d97ff-95j4v   1/1     Running   0          28s
nginx-taints-549f6d97ff-zgp6m   1/1     Running   0          28s
[root@nccztsjb-node-23 ~]# 

 

进入其中的一个容器,查看环境变量

 

[root@nccztsjb-node-23 ~]# kubectl exec -it nginx-taints-549f6d97ff-6p7nj -- bash -c "env | grep IP"
POD_IP=172.39.209.114
INSTANCE_HOST_IP=172.20.58.83
[root@nccztsjb-node-23 ~]# 

可以看到,在容器中,已经可以获得这2个环境变量了。

 

这种,在容器内获取POD信息的方式叫做(Downward API

 

OK,以上就简单介绍了如何在容器中获取pod所在的主机IP地址、POD自己的IP地址的方式,并且这些值都是以变量的方式在容器中存在的。

 

3、downward api的好处是什么

 

使用downward api,对于容器需要的关于自己的,也就是pod的信息,通过环境变量的方式注入到容器中,就不需要和k8s 的api进行交互来动态获取这些信息,降低了与api server的耦合度。

posted @ 2022-03-28 10:53  Zhai_David  阅读(641)  评论(0编辑  收藏  举报