
# 使用hostAliases参数配置Pod的/etc/hosts文件
#### 使用场景
在Kubernetes集群中，Pod内部的主机名解析默认依赖DNS配置（如CoreDNS）。但在某些情况下，Pod需要对特定域名进行本地化的解析控制，而不希望依赖集群DNS或外部DNS服务。然而，Pod的"/etc/hosts"文件由kubelet管理，默认内容由集群网络插件和系统配置决定。如果直接登录容器修改该文件，容器重启或重建后修改将丢失，无法持久化。您可以使用**hostAliases**参数在Pod级别添加主机名的解析，向Pod的"/etc/hosts"文件中追加自定义解析条目。
#### 操作步骤
1. 使用kubectl连接集群。
2. 创建hostaliases-pod.yaml文件。 
   ```
   vi hostaliases-pod.yaml
   ```
   示例如下：
   ```
   apiVersion: v1
   kind: Pod
   metadata:
     name: hostaliases-pod
   spec:
     hostAliases:      # 添加自定义主机名与IP地址映射
     - ip: 127.0.0.1   # 目标IP地址
       hostnames:      # 绑定到该IP的主机名列表
       - foo.local
       - bar.local
     - ip: 10.1.2.3
       hostnames:
       - foo.remote
       - bar.remote
     containers:
       - name: cat-hosts
         image: tomcat:9-jre11-slim  # 镜像及镜像版本可根据实际需求进行修改
     imagePullSecrets:
       - name: default-secret
   ```
   表1hostAliases参数说明 
   | 参数名                            | 参数类型     | 参数解释                                                                                        |
   |:---|:---|:---|
   | spec.hostAliases               | Object数组 | 自定义主机名解析条目列表，用于向Pod的/etc/hosts文件中追加解析记录（不会覆盖系统默认的localhost或Kubernetes相关条目），实现主机名到IP地址的本地解析。 |
   | spec.hostAliases\[\].ip        | 字符串      | 指定主机名要解析的目标IP地址。必须为合法的IP地址格式。                                                               |
   | spec.hostAliases\[\].hostnames | 字符串数组    | 需绑定到上述IP地址的主机名列表，支持添加多个别名。主机名需符合DNS命名规范。                                                    |
      
   
   
3. 创建Pod。 
   ```
   kubectl create -f hostaliases-pod.yaml
   ```
   命令行终端显示如下信息表明Pod已创建。
   ```
   pod/hostaliases-pod created
   ```
   
   
4. 查看Pod状态。 
   ```
   kubectl get pod hostaliases-pod
   ```
   Pod状态显示为Running，表示Pod已创建成功。
   ```
   NAME                  READY          STATUS       RESTARTS      AGE
   hostaliases-pod       1/1            Running      0             16m
   ```
   
   
5. 查看配置的**hostAliases** 是否正常，执行如下命令：
   
   ```
   kubectl exec hostaliases-pod -- cat /etc/hosts
   ```
   文件末尾可以看到由**hostAliases**添加的条目，例如：
   ```
   # Entries added by HostAliases.
   127.0.0.1foo.localbar.local
   10.1.2.3foo.remotebar.remote
   ```
   
   
 
