You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OKE增强型集群CoreDNS自定义Hosts配置自动回滚的问题及持久化配置方案咨询

OKE增强型集群CoreDNS自定义Hosts配置自动回滚的问题及持久化配置方案咨询

我太懂你这种郁闷了——辛辛苦苦改了CoreDNS的ConfigMap,等了半天配置生效,结果睡一觉起来又被打回原形,哪怕是增强型OKE集群也没能幸免。其实这个问题的根源很明确:OKE增强型集群的控制平面会定期执行组件reconcile(调和)操作,Oracle的运维系统会把CoreDNS的配置重置回集群默认状态,你的手动修改自然就被覆盖了。

下面给你两种经过验证的持久化方案,按官方推荐程度排序:

方案一:使用OKE官方的DNS自定义功能(最推荐)

Oracle专门为OKE集群提供了自定义DNS记录的功能,完全不需要手动修改CoreDNS的资源,配置会被集群控制平面持久化管理,绝对不会被回滚。

操作步骤很简单:

  1. 登录OCI控制台,找到你的增强型OKE集群
  2. 在集群详情页的左侧菜单里找到**"DNS Customization"**(DNS自定义)选项
  3. 点击**"Add Record"**,选择记录类型(你需要的是A记录,对应IP到域名的映射)
  4. 填写域名(比如vm1.example.com)、对应的IP地址,然后保存

这个操作完成后,OKE会自动把这些自定义记录集成到CoreDNS的配置里,所有集群内的Pod都能正常解析这些域名,而且完全不用担心被回滚。

方案二:手动挂载自定义Hosts ConfigMap(适合需要更灵活配置的场景)

如果你需要更复杂的hosts规则(比如批量映射、自定义域后缀),可以通过挂载独立的ConfigMap来实现,避免直接修改默认的coredns ConfigMap。

具体步骤:

1. 创建存储自定义Hosts的ConfigMap

先写一个YAML文件(比如custom-coredns-hosts.yaml):

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-coredns-hosts
  namespace: kube-system
data:
  hosts: |
    # 这里填写你的IP-域名映射,每行一条
    10.0.0.10  vm1.example.com
    10.0.0.11  vm2.example.com
    10.0.0.12  db.example.internal

然后执行命令创建:

kubectl apply -f custom-coredns-hosts.yaml -n kube-system

2. 修改CoreDNS的配置,引入自定义Hosts文件

编辑CoreDNS的ConfigMap:

kubectl edit cm coredns -n kube-system

在Corefile的. :53块里,添加hosts插件配置,引用我们刚才创建的文件(注意要放在kubernetes插件之前,确保自定义记录优先解析):

.:53 {
  errors
  health {
    lameduck 5s
  }
  ready
  # 新增的自定义hosts配置
  hosts /etc/coredns/custom-hosts/hosts {
    fallthrough
  }
  kubernetes cluster.local in-addr.arpa ip6.arpa {
    pods insecure
    fallthrough in-addr.arpa ip6.arpa
    ttl 30
  }
  # 后面的默认配置保留不变
  prometheus :9153
  forward . /etc/resolv.conf
  cache 30
  loop
  reload
  loadbalance
}

3. 修改CoreDNS Deployment,挂载自定义ConfigMap

编辑CoreDNS的Deployment,添加Volume和VolumeMount:

kubectl edit deployment coredns -n kube-system

在spec.template.spec.volumes下添加:

- name: custom-hosts
  configMap:
    name: custom-coredns-hosts

然后在spec.template.spec.containers[0].volumeMounts下添加:

- name: custom-hosts
  mountPath: /etc/coredns/custom-hosts
  readOnly: true

4. 重启CorePods让配置生效

kubectl rollout restart deployment coredns -n kube-system

这样操作后,你的自定义hosts配置存放在独立的ConfigMap里,OKE的控制平面不会修改这个ConfigMap,CoreDNS通过挂载的方式读取,就能避免被回滚了。

注意事项

  • 绝对不要直接修改默认的coredns ConfigMap里的hosts块,不管是增强型还是基础型集群,OCI的控制平面都会定期重置这个配置
  • 方案一的官方DNS自定义功能只支持标准的DNS记录类型(A、CNAME等),如果需要更复杂的规则(比如通配符、自定义域的完全接管),再用方案二
  • 每次修改自定义Hosts ConfigMap后,记得重启CoreDNS Pod让配置生效

备注:内容来源于stack exchange,提问作者Sahil Aggarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:08:03