eminaktas/kubedns-shepherd
GitHub: eminaktas/kubedns-shepherd
一个用于统一管理和优化 Kubernetes 集群中 Pod DNS 配置的控制器,帮助解决 DNS 解析性能和可靠性问题。
Stars: 41 | Forks: 4
# KubeDNS Shepherd
[](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/release.yaml)
[](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/test.yaml)
[](https://github.com/eminaktas/kubedns-shepherd/actions/workflows/lint.yaml)
[](https://goreportcard.com/report/eminaktas/kubedns-shepherd)
[](https://coveralls.io/github/eminaktas/kubedns-shepherd?branch=main)
[](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, 子域名突变, 容器编排, 开源项目, 提示注入, 日志审计, 流量管理, 程序破解, 资源调度, 配置优化, 集群管理