如何将pod所在的主机IP地址,以变量的方式注入到容器当中? (downward API)
2023-09-11 14:14:16 时间
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的耦合度。
相关文章
- X32进程注入x64DLL到x64进程
- XXE(XML外部实体注入)
- PHP 依赖注入容器实现
- JAXB- XML外部实体注入安全代码漏洞(XXE)
- 漏洞复现----42、Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
- 网络安全——基于联合查询的字符型GET注入
- java 项目 文件关系 扫描 注释注入
- 统一通信为呼叫中心注入新活力
- 东富龙签约美特 CRM为医疗系统注入新活力
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
- SQL注入写入一句话php(outfile方式)&中国菜刀连接
- 整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
- intellij idea中去除@Autowired注入对象带来的下划线提示