eminaktas/kubedns-shepherd

GitHub: eminaktas/kubedns-shepherd

一个用于统一管理和优化 Kubernetes 集群中 Pod DNS 配置的控制器,帮助解决 DNS 解析性能和可靠性问题。

Stars: 41 | Forks: 4

# KubeDNS Shepherd [![发布](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/06fce82f94220814.svg)](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/release.yaml) [![测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7121dac717220817.svg)](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/test.yaml) [![代码检查](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/927bca0aa1220819.svg)](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/lint.yaml) [![Go 报告卡](https://goreportcard.com/badge/eminaktas/kubedns-shepherd)](https://goreportcard.com/report/eminaktas/kubedns-shepherd) [![覆盖率状态](https://coveralls.io/repos/github/eminaktas/kubedns-shepherd/badge.svg?branch=main)](https://coveralls.io/github/eminaktas/kubedns-shepherd?branch=main) [![最新发布](https://badgen.net/github/release/eminaktas/kubedns-shepherd)](https://github.com/eminaktas/kubedns-shepherd) KubeDNS Shepherd 是一个 Kubernetes controller,用于管理 workloads 的 DNS 配置,确保在您的 Kubernetes 集群内提供高效且可靠的 DNS 配置方式。对于希望优化其 Kubernetes 环境中的 DNS 解析和配置的用户来说,这个项目至关重要。 ## 入门指南 ### 在集群上部署 **将 KubeDNS Shepherd 部署到集群:** ``` helm repo add kubedns-shepherd https://eminaktas.github.io/kubedns-shepherd/ helm repo update helm install kubedns-shepherd kubedns-shepherd/kubedns-shepherd --namespace kubedns-shepherd-system --create-namespace ``` **创建您的解决方案实例:** 您可以应用 config/sample 中的任何示例: ### 卸载 **从集群中删除实例 (CR):** ``` kubectl delete -k config/samples/ ``` **从集群中卸载 KubeDNS Shepherd:** ``` helm uninstall kubedns-shepherd --namespace kubedns-shepherd-system ``` ## 配置说明 ``` apiVersion: config.kubedns-shepherd.io/v1alpha1 kind: DNSClass metadata: name: example spec: disabledNamespaces: - kube-system allowedDNSPolicies: - None - ClusterFirst - ClusterFirstWithHostNet dnsPolicy: None dnsConfig: nameservers: - 10.96.0.10 searches: - "svc.cluster.local" - "{{ .podNamespace }}.svc.cluster.local" options: - name: ndots value: "2" - name: edns0 ``` - `disabledNamespaces`:指定不应应用 DNSClass 规则的 namespaces。 - `allowedDNSPolicies`:指定 namespaces 允许的 DNS 策略。 - `dnsPolicy`:指定 Pod 的 DNS 策略。有关更多详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy)。 - `dnsConfig`:指定 Pod 的 DNS 配置。有关更多详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config)。 ### DNSClass 中的动态配置 KubeDNS Shepherd 支持动态参数。以下是受支持的键,它们应在 `{{ }}` 中使用: #### 受支持的键 - `.podNamespace`:添加所配置 pod 的 namespace。 - `.clusterDomain`:添加已发现的集群 domain。 如果用户未在 `DNSClass` 中定义 Nameservers,controller 也可以自动配置它们。 ## 使用场景 ### 改进 DNS 解析 - **问题**:某些服务中的 DNS 解析间歇性失败。 - **解决方案**:使用此 controller 调整 pod 的 `ndots` 和/或 `searches` 选项,或者在 FQDN 末尾添加点号 `.`,从而优化环境。 ### DNS 查询优化 - **问题**:由于 `resolv.conf` 中的 `ndots` 选项设置为 5,Kubernetes Pod 在首次 DNS 查询时遭遇失败。 - **解决方案**:使用此 controller 调整 `resolv.conf` 中的 `ndots` 和 `searches` 选项,从而优化环境。 ## 行为准则 在与我们的社区互动之前,请阅读我们的[行为准则](CODE_OF_CONDUCT.md)。 ## 许可证 本项目基于 [Apache-2.0 许可证](LICENSE) 授权。
标签:3D图, CISA项目, DNS管理, DNS解析, DNS配置, EVTX分析, Go语言, Helm, K8s控制器, KubeDNS, Service Mesh, 子域名突变, 容器编排, 开源项目, 提示注入, 日志审计, 流量管理, 程序破解, 资源调度, 配置优化, 集群管理