深入解析:在Docker与Kubernetes中添加自定义Hosts的方法与实践

38次阅读
没有评论

共计 1574 个字符,预计需要花费 4 分钟才能阅读完成。

AI 智能摘要
在容器化环境中,自定义 DNS 解析是常见的调试需求。文章详细介绍了在 Docker 和 Kubernetes 中添加 Hosts 条目的方法,包括通过命令行、Docker Compose 或 Pod Manifest 配置 hostAliases,并附有示例说明。同时提及了动态修改和版本兼容性等注意事项。
— 此摘要由 AI 分析文章内容生成,仅供参考。

引言

在容器化环境中,自定义 DNS 解析(如添加特定 Hosts 条目)是调试、服务发现或访问内部系统的常见需求。Docker 和 Kubernetes(K8s)提供了灵活的机制实现这一目标。本文将深入探讨两者的实现方法,并通过具体示例演示操作流程。

一、Docker 中添加自定义 Hosts

1. 单次容器运行时添加

通过 docker run 命令的 --add-host 参数直接注入 Hosts 条目。

示例:将 api.internal.com 指向 IP 10.0.0.100

[root@centos ~]# docker run -it --rm \
>   --add-host "api.internal.com:10.0.0.100" \
>   alpine:latest cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.0.0.100      api.internal.com # 自定义 hosts
172.17.0.4      fdfc2241428f
[root@centos ~]#

2. Docker Compose 中持久化配置

docker-compose.yml 中使用 extra_hosts 字段定义。

示例:

version: '3'
services:
  webapp:
    image: nginx:alpine
    extra_hosts:
      - "db.local:192.168.1.5"
      - "auth.service:10.2.3.4"

启动后,容器内 /etc/hosts 将自动包含对应条目。

3. 修改容器内部 Hosts 文件(临时)

直接进入容器编辑文件(不推荐生产环境使用):

docker exec -it <container_id> sh
echo "10.10.10.2 legacy.system" >> /etc/hosts

二、Kubernetes 中添加自定义 Hosts

1. 通过 Pod Manifest 配置hostAliases

K8s 允许在 Pod 定义中通过 hostAliases 字段添加 Hosts。

示例 YAML:

apiVersion: v1
kind: Pod
metadata:
  name: hostalias-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.19
  hostAliases:
  - ip: "172.16.1.2"
    hostnames:
    - "redis.master"
    - "cache.prod"
  - ip: "192.168.3.45"
    hostnames:
    - "monitor.grafana"

应用配置:

kubectl apply -f pod-with-hostaliases.yaml
kubectl exec hostalias-demo -- cat /etc/hosts

2. 动态修改运行中的 Pod

通过 kubectl patch 命令即时更新 Hosts(需 Pod 允许重启):

kubectl patch pod hostalias-demo --type json \
  -p '[{"op":"add","path":"/spec/hostAliases","value": [{"ip":"10.88.0.15","hostnames": ["test.env"]
        }]
    }]'

3. 注意事项

  • 版本兼容性:K8s v1.7+ 支持hostAliases
  • 优先级:HostAliases 条目位于系统生成内容之后
  • DaemonSet/Deployment:需修改模板中的spec.template.spec.hostAliases

附录

正文完
 0
评论(没有评论)