尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ExternalDNS 离线部署:从内网源码到私有镜像的完整方案

ExternalDNS 离线部署:从内网源码到私有镜像的完整方案 ExternalDNS 离线部署从内网源码到私有镜像的完整方案【免费下载链接】external-dnsConfigure external DNS servers dynamically from Kubernetes resources项目地址: https://gitcode.com/gh_mirrors/ex/external-dnsExternalDNS 离线部署要先解决两件事镜像从哪来、记录写到哪去。内网集群的 Ingress 域名在终端机器上解析不出来Service 一变就得有人去内网 Bind 上手改 zone 文件。ExternalDNS 能把集群资源自动同步到内网 DNS但在不通外网的网络里官方镜像和 Go 依赖都拉不下来。方案全景同步链路的四个角色整条链路只有四个角色各管一件事Source读取集群内 Service、Ingress产出域名 → IP的端点列表Plan拿期望状态与 DNS 服务器现有记录做 diff决定增、改、删Registry记录 ExternalDNS 自己创建过的记录归属不碰别人的记录Provider真正执行写入的组件CoreDNS 可看 provider/coredns/支持动态更新的 Bind 类服务器可看 provider/rfc2136/链路打通后这个循环不再经过任何外网由--interval驱动定时执行读 source、比对、写 provider、打归属标记。TXT 归属标记是 Registry 写的管理性记录不参与业务解析不影响服务域名本身的可用性。ExternalDNS 官方示意图部署跑通后你会得到不再手改 zone 文件域名跟着资源走每条记录归属清晰手工记录不会被误删同一套 kustomize 清单可复用到多个内网集群前置条件速查 ✅项目要求Kubernetesv1.19Go 工具链1.26与 go.mod 一致Docker 构建节点可构建镜像并推送私有仓库私有 registry全部集群节点可达DNS 服务器CoreDNS 或 RFC 2136 兼容如 Bind 9传输通道带校验的介质U 盘/光盘源码包与 go.sum 同传ExternalDNS 离线部署实操准备素材克隆并 vendor在有网机器上完成。克隆后先 vendor把依赖固化进源码包离线包里最重的就是 Go 模块vendor 做完内网就不再需要联网。git clone https://gitcode.com/gh_mirrors/ex/external-dns cd external-dns go mod vendor # 依赖全部落到 vendor/ tar -czf extdns-src.tar.gz --exclude.git .验证点tar -tzf extdns-src.tar.gz | grep vendor/modules.txt能打出路径依赖完整。构建与推送私有镜像Makefile 的build.image目标用 ko 构建单架构镜像且不推送。镜像包传到内网构建节点后load 再推到私有 registry。集群节点架构统一时单架构即可ko 会由scripts/install-ko.sh自动准备。# 有网机器本地构建镜像不推送 make build.image IMAGEyour-registry/external-dns:v0.22.0 docker save external-dns | gzip extdns-image.tar.gz # 内网构建节点载入并推送到私有 registry docker load -i extdns-image.tar.gz docker tag external-dns your-registry/external-dns:v0.22.0 docker push your-registry/external-dns:v0.22.0验证点docker images | grep external-dns出现 v0.22.0 本地镜像tag 建议与仓库 kustomization.yaml 里的 newTag 保持一致。部署与验证kustomize 改写仓库自带现成的 kustomize 清单只需改两处镜像改私有仓库容器参数改内网参数。# kustomize/kustomization.yaml 的 images 追加改写 - name: registry.k8s.io/external-dns/external-dns newName: your-registry/external-dns newTag: v0.22.0# external-dns-deployment.yaml 的 args 改为内网参数 - --providerrfc2136 - --rfc2136-hostdns-server-ip - --registrytxt - --txt-owner-idowner-id--registry的取值决定归属怎么记--registrynoop不写任何归属标记流程最简单但同一 zone 里还有别人手工管理的记录时容易互相覆盖--registrytxt会在每条记录旁写一条 TXT 标记属主多实例共用一个 zone 也不会误删对方。内网生产环境建议 txt 加唯一 owner-id。如果内网用的是 CoreDNS把 args 换成--providercoredns及对应地址参数即可。应用与验证kubectl apply -k ./kustomizekubectl get pods -l appexternal-dns期望1/1 Runningdig service-domain返回期望 IP且旁边存在 TXT 归属记录验证点pod Ready 但 DNS 侧无记录时先查 provider 的地址端口连通性再翻排障表。内网环境排障速查表现象处理方式ErrImagePull/ImagePullBackOff查私有 registry 可达性与拉取密钥provider 连接被拒核对--rfc2136-host集群侧可达记录不更新、归属冲突更换唯一的--txt-owner-idIngress 不产生记录检查 Ingress 的 hostname 注解生产加固清单 加--leader-electiontrue多副本时避免两个实例并发写记录默认使用--policyupsert-only只增改不删除保护手工记录让 Prometheus 抓 7979 端口的/metrics盯external_dns_last_sync_timestamp_seconds同步停滞往往先于故障报警加 resources limits500m CPU / 512Mi 内存避免单组件拖垮节点上其他负载定期备份 zone 文件txt 模式下归属信息都落在 zone 里误操作后可恢复延伸入口想用 CoreDNS 跑完整闭环的可看 docs/tutorials/coredns.md 里的端到端示例每个命令行 flag 的含义都在docs/flags.md中有完整说明。【免费下载链接】external-dnsConfigure external DNS servers dynamically from Kubernetes resources项目地址: https://gitcode.com/gh_mirrors/ex/external-dns创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表