某些情况下,DNS 或者其他的域名解析方法可能不太适用,您需要配置 /etc/hosts 文件,在Linux下是比较容易做到的,在 Kubernetes 中,可以通过 Pod 定义中的 hostAliases 字段向 Pod 的 /etc/hosts 添加条目。

适用其他方法修改 Pod 的 /etc/hosts 文件是不被推荐的,因为 kubelet 可能在重新创建 Pod 时,就会覆盖这些修改。

默认hosts文件内容

通过创建一个 Nginx Pod,我们可以查看Pod创建后,/etc/hosts 文件的默认内容,执行命令:

kubectl run nginx --image nginx --generator=run-pod/v1

执行命令查看 Pod 的IP:

kubectl get pods -o wide

输出结果如下所示:

NAME     READY     STATUS    RESTARTS   AGE    IP           NODE
nginx 1/1 Running 0 13s 10.200.0.4 worker0

执行命令查看hosts文件的内容

kubectl exec nginx -- cat /etc/hosts

输出结果如下所示:

# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.0.4 nginx

默认情况下, hosts 文件只包含 IPv4 和 IPv6 的基本配置,例如 localhost 和该 Pod 自己的 hostname。

使用hostAliases添加额外的条目

通过 Pod 定义中的 .spec.hostAliases 字段,我们可以向 Pod 的 /etc/hosts 文件中添加额外的条目,用来解析 foo.localbar.local127.0.0.1 和 foo.remotebar.remote10.1.2.3,如下所示:

host-aliases-pod.yaml文件内容

apiVersion: v1
kind: Pod
metadata:
name: hostaliases-pod
spec:
restartPolicy: Never
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
- "bar.local"
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
containers:
- name: cat-hosts
image: busybox
command:
- cat
args:
- "/etc/hosts"

执行一下命令可创建该 Pod:

kubectl apply -f host-aliases-pod.yaml

执行命令查看 Pod 的 IP 和状态:

kubectl get pod --output=wide

输出结果如下所示:

NAME                           READY     STATUS      RESTARTS   AGE       IP              NODE
hostaliases-pod 0/1 Completed 0 6s 10.200.0.5 worker0

执行命令查看 hosts 文件内容:

kubectl logs hostaliases-pod

输出结果如下所示:

# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.200.0.5 hostaliases-pod # Entries added by HostAliases.
127.0.0.1 foo.local bar.local
10.1.2.3 foo.remote bar.remote

从结果中,我们可以看到,配置的条目被添加在 /etc/hosts 文件的末尾。

为什么kubelet要管理hosts文件

Kubelet 管理

hosts修改

该文件。

细节情况请参考两个 github issue:

https://github.com/kubernetes/kubernetes/issues/14633

https://github.com/moby/moby/issues/17190

由于该文件已经被 Kubelet 管理起来,任何对该文件手工修改的内容,都将在 Kubelet 重启容器或者 Pod 重新调度时被覆盖。因此,最好是通过 修改 Pod 的 /etc/hosts 文件,而不是手工修改。

配置Pod的 /etc/hosts的更多相关文章

  1. 使用HostAliases 添加pod 的/etc/hosts

    默认的pod 的/etc/hosts 无法自动数据 [root@master1 ~]# kubectl exec smsservice-5c7ff5f74-bc969 -n testihospital ...

  2. kubenetes之配置pod的QoS

    系列目录 上节提到过,QoS影响pod的调度和驱离,本节讲解如何通过配置pod来使它自动被赋予一个QoS 实际上是pod的配置达到一定标准,则kubernetes会自动为其它添加一个QoS类 QoS类 ...

  3. HostAliases向Pod中添加hosts解析

    前言 根据公司同一个项目需要不同的de/te/pe环境,由于相应环境调用的数据库等配置信息存在不同等因素,需要向Kubernetes集群中的Pod添加对应的hosts解析. 解决 以下以yaml文件自 ...

  4. 配置虚拟域名,hosts文件起作用

    快速打开hosts方法 开始->运行->system32->回车 当前路径文件夹drivers\etc\hosts hosts文件起作用,目前楼主知道有两个可能原因 1.刷新dns ...

  5. (转)Kubernetes 配置Pod和容器(十七) 使用Secrets管理安全证书

    转:https://www.jianshu.com/p/530b3642c642 本章节展示了如何把密码秘钥等敏感数据安全的注入到Pod里面. 转换安全数据成base-64表示 假设你有两个秘密数据: ...

  6. 一键配置 github 可用的 hosts

    最近发现访问 Github 各种不畅通, 静态资源经常加载不出来. 写了一个一键脚本修改本机 /etc/hosts 文件, 切换到可用的 IP (数据来自 https://gitee.com/xuew ...

  7. 关于 一开始不懂得 hosts配置。

    是转载别人的. 原文: http://my.oschina.net/cxz001/blog/298228   感谢分享: 一开始抄着陪着win下的hosts文件.然后配置  apache中的hosts ...

  8. huhamhire-hosts — Hosts文件自动配置工具

    https://www.anotherhome.net/1376 推荐配合EasyGoAgent使用: EasyGoAgent — 开箱即用的GoAgent Update 2015.5.15 数据文件 ...

  9. centos7使用kubeadm配置高可用k8s集群

    CountingStars_ 关注 2018.08.12 09:06* 字数 464 阅读 88评论 0喜欢 0 简介 使用kubeadm配置多master节点,实现高可用. 安装 实验环境说明 实验 ...

随机推荐

  1. MySQL--用通配符进行过滤(LIKE操作符)

    1.LIKE操作符 怎样搜索产品名中包含文本anvil的所有产品?用简单的比较操作符肯定不行,必须使用通配符.利用通配符可创建比较特定数据的搜索模式.在这个例子中,如果你想找出名称包含anvil的所有 ...

  2. 用cmd命令进行磁盘清理(主要是系统盘)

    作用:清理磁盘(主要是系统盘)中不需要的垃圾文件操作方法: 第一步:Windows键+R键 调出cmd命令窗口(窗口图如下:) 第二步:输入框中输入cmd命令,按下Enter键,进入如下图界面: 第三 ...

  3. 【docker专栏7】容器自启动与守护进程停止后容器保活

    本文为大家介绍容器自启动以及docker 守护进程挂掉或者docker升级的情况下,如何保证容器服务的正常运行.主要包含三个部分 一.守护进程开机自启 在我们安装docker的时候,介绍过启动dock ...

  4. 使用Pure Pipes来替换HTML里面的纯函数

    <ul *ngFor="let item of list"> <li>{{show(item.label)}}</li> </ul> ...

  5. ZJOI2016 小星星 题解

    我一生之敌是状压 本文发表于 洛谷博客:https://www.luogu.com.cn/blog/LoveMC/solution-p3349 Cnblogs:https://www.cnblogs. ...

  6. ABP中的数据过滤器

      本文首先介绍了ABP内置的软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant),然后介绍了如何实现一个自定义过滤器,最后介绍了在软件开发过程中遇到的实际问题,同时给出了 ...

  7. JAVA语言基础组成(2)

    函数  函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...

  8. Vue3系列11--Teleport传送组件

    Teleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,不受父级style.v-show等属性影响,但data.prop数据依旧能够共用的技术:类似于 Rea ...

  9. 8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路

    ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选)   大数据是一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,而大数据作为企业运转的基础,只有经过提 ...

  10. 如何有效管理产品生命周期(How to Effectively Manage a Product Lifecycle)

    本文翻译自文章:How to Effectively Manage a Product Lifecycle 文章原文链接:https://medium.com/design-bootcamp/how- ...