在 Ubuntu 上配置 Kubernetes 服务发现
一 核心原理与组件
- 服务发现依赖两大支柱:一是 Service 为一组 Pod 提供稳定的虚拟 IP(ClusterIP)与负载均衡入口;二是 CoreDNS 将 Service 自动注册为 DNS 记录,供集群内通过名称访问。Service 的完整域名格式为:..svc.cluster.local。Kubernetes 还支持通过环境变量注入服务信息,但仅对启动前已存在的 Service 有效,现代集群以 DNS 为主。CoreDNS 默认部署在 kube-system 命名空间,监听 API Server 变更并自动更新记录。
二 前置条件与检查
- 在 Ubuntu 节点上准备并加入集群(如使用 kubeadm 部署),确保网络插件(如 Flannel)已就绪,节点状态为 Ready:
- 安装工具:sudo apt-get update && sudo apt-get install -y apt-transport-https curl
- 初始化控制面:sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 部署网络插件:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 加入工作节点:使用 kubeadm join 输出的命令
- 检查节点:kubectl get nodes
- 确认 kube-proxy 正常运行(负责将 Service 的虚拟 IP 转发到后端 Pod):kubectl -n kube-system get pods -l k8s-app=kube-proxy。kube-proxy 支持 iptables(默认)与 ipvs(高性能)两种模式,可按需切换。
三 配置 CoreDNS 服务发现
- 查看与确认 CoreDNS 部署:
- kubectl -n kube-system get pods -l k8s-app=kube-dns
- kubectl -n kube-system get svc kube-dns 应看到 ClusterIP(如 10.96.x.x)与端口 53/UDP、53/TCP
- 按需调整 CoreDNS 配置(示例:添加静态解析与上游转发):
- 说明:
- 默认 pods insecure 允许直接解析 Pod 名称(便于调试);生产可改为 pods verified 并配合 Pod 注解使用。
- 通过 hosts 插件可添加静态记录;通过 forward 插件将未知域名转发至宿主机 /etc/resolv.conf 指定的上游 DNS。
四 应用接入与验证
- 创建后端应用与 Service(示例):
- 在集群内通过 DNS 访问与验证:
- 临时调试容器:kubectl run -it --rm --restart=Never --image=busybox:1.36 --restart=Never – nslookup my-app-service.default.svc.cluster.local
- 或在应用容器中直接请求 http://my-app-service 或 http://my-app-service.default.svc.cluster.local
- 环境变量的局限说明:
- 仅当 Pod 启动时已存在的 Service 才会被注入为环境变量(如 MYSERVICE_SERVICE_HOST/PORT);后续新增的 Service 不会自动出现,因此生产建议使用 DNS 方式。
五 常见问题与排查
- Pod 无法解析内网域名:
- 检查 dnsPolicy(默认 ClusterFirst),以及 Pod 内 /etc/resolv.conf 是否包含 nameserver 与正确的 search 域。
- 查看 CoreDNS 日志:kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50
- 检查 Endpoints:kubectl get endpoints my-app-service 是否关联到后端 Pod IP
- 外部域名解析异常:
- 确认 CoreDNS 的 forward . /etc/resolv.conf 存在,且宿主机 /etc/resolv.conf 包含可用上游 DNS(如 8.8.8.8)
- 需要更高 DNS 性能或定制转发:
- 在 CoreDNS 中调整 forward 插件顺序与上游列表;必要时切换 kube-proxy 为 ipvs 模式以提升 Service 转发性能。