恰逢暮雪亦白頭 發表於 2023-5-9 10:39:00

k8s给pod配置hosts及配置域名

<p>转:https://blog.csdn.net/ljx1528/article/details/111621669</p>
<p>在应用开发中,我们不应把远程服务的 ip 硬编码到应用中。有些同学习惯使用域名来标定远程服务,通过修改解析,来区分开发测试和生产环境,这是一个挺好的习惯。<br><br>在 k8s 系统中,我们使用服务名来调用服务,并通过 coredns 来进行解析。但那些集群外的服务,并且已经被硬编码的域名如何访问呢?<br><br>方法1:修改容器的 hosts<br>设想:把 hosts 文件内容存储在 configmap 中,通过 volume 绑定到 /etc/hosts。但很不幸,/etc/hosts 被 k8s 征用了,无法修改。<br><br>但 k8s 给我们提供了 hostAliases 来解决此问题。</p>
<div class="cnblogs_code">
<pre>apiVersion: apps/<span style="color: rgba(0, 0, 0, 1)">v1
kind: Deployment
metadata:
name: hosts</span>-<span style="color: rgba(0, 0, 0, 1)">append
labels:
    app: hosts</span>-<span style="color: rgba(0, 0, 0, 1)">append
spec:
replicas: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
selector:
    matchLabels:
      app: hosts</span>-<span style="color: rgba(0, 0, 0, 1)">append
template:
    metadata:
      labels:
      app: hosts</span>-<span style="color: rgba(0, 0, 0, 1)">append
    spec:
      hostAliases:
      </span>- ip: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      hostnames:
      </span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">foo.local</span><span style="color: rgba(128, 0, 0, 1)">"</span>
      - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar.local</span><span style="color: rgba(128, 0, 0, 1)">"</span>
      - ip: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10.1.2.3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      hostnames:
      </span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">foo.remote</span><span style="color: rgba(128, 0, 0, 1)">"</span>
      - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bar.remote</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      containers:
      </span>-<span style="color: rgba(0, 0, 0, 1)"> image: nginx:alpine
      name: hosts</span>-<span style="color: rgba(0, 0, 0, 1)">append
      ports:
      </span>- containerPort: <span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">
          protocol: TCP</span></pre>
</div>
<p>部署后,pod 里面的 hosts 文件已经追加了解析记录。结果如下:</p>
<div class="cnblogs_code">
<pre>$ kubectl <span style="color: rgba(0, 0, 255, 1)">exec</span> hosts-append-5576848dcf-jnt4s -- cat /etc/<span style="color: rgba(0, 0, 0, 1)">hosts

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Kubernetes-managed hosts file.</span>
127.0.0.1<span style="color: rgba(0, 0, 0, 1)">    localhost
::</span>1    localhost ip6-localhost ip6-<span style="color: rgba(0, 0, 0, 1)">loopback
fe00::0    ip6</span>-<span style="color: rgba(0, 0, 0, 1)">localnet
fe00::0    ip6</span>-<span style="color: rgba(0, 0, 0, 1)">mcastprefix
fe00::</span>1    ip6-<span style="color: rgba(0, 0, 0, 1)">allnodes
fe00::</span>2    ip6-<span style="color: rgba(0, 0, 0, 1)">allrouters
</span>10.4.0.224    hostbiza-5576848dcf-<span style="color: rgba(0, 0, 0, 1)">jnt4s

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Entries added by HostAliases.</span>
127.0.0.1<span style="color: rgba(0, 0, 0, 1)">    foo.local    bar.local
</span>10.1.2.3    foo.remote    bar.remote</pre>
</div>
<p>此方法的缺点是:不同环境下的域名映射是不一样的,我必须为环境编写不同的 yaml 文件。<br><br>方法2:使用私有dns解析<br>k8s 内部默认已经安装了 coredns 服务,可以通过修改 coredns 的配置来达到内部解析的目的。<br><br>coredns 的配置写在了 configmap 的 kube-system 命名空间下的 coredns 配置节点了。只需要增加 hosts 配置节点就好。<br><br>编辑他:</p>
<div class="cnblogs_code">
<pre>kubectl edit cm -n kube-system coredns</pre>
</div>
<p>Corefile 配置示例(其中 hosts 节点是自定义的解析节点):</p>
<p><img src="https://img2023.cnblogs.com/blog/1181602/202305/1181602-20230509103826039-850438156.png"></p>
<p>&nbsp;修改完成后,要等等。配置下发完成即可生效。可以进入 pod 内部 ping 一下域名看看。<br><br>在一般的控制台,这个节点无法修改。但借助命令行 kubectl 或者其他可视化工具(如 Lens),可以修改这个配置节点。<br><br>至于开发环境下的域名解析,自己改本机 hosts 就好啦。<br><br>当然,更好的做法是把配置文件与应用解耦,所有的配置,包括远程服务的域名或 ip 都可以被远程修改。<br>————————————————<br>版权声明:本文为CSDN博主「ljx1528」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。<br>原文链接:https://blog.csdn.net/ljx1528/article/details/111621669</p><br><br>
来源:https://www.cnblogs.com/fyy-hhzzj/p/17384155.html
頁: [1]
查看完整版本: k8s给pod配置hosts及配置域名