在 CentOS 上落地 Kubernetes 服务发现
一 核心原理与组件
二 在 CentOS 上的落地步骤
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
labels:
app: demo
spec:
replicas: 2
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: default
spec:
selector:
app: demo
ports:
- protocol: TCP
port: 80
targetPort: 80
执行创建并验证:kubectl apply -f demo.yaml
kubectl get svc backend # 应见 CLUSTER-IP 与 80/TCP
kubectl get endpoints backend # 应见后端 Pod IP:80 列表
kubectl run -it --rm debug --image=busybox:1.36 --restart=Never -- nslookup backend.default.svc.cluster.local
kubectl run -it --rm debug --image=busybox:1.36 --restart=Never -- wget -qO- http://backend:80
跨命名空间访问示例:http://backend.other-ns.svc.cluster.local:80。kubectl scale deployment backend --replicas=3
kubectl get endpoints backend -w
若使用 NodePort/LoadBalancer 对外暴露,可在节点访问 NodeIP:NodePort 或云厂商提供的负载均衡地址,内部依然通过 Service 名称进行服务发现。三 常见场景与配置要点
四 排查清单
nslookup kubernetes.default.svc.cluster.local;检查 CoreDNS Pod 就绪与日志(kubectl -n kube-system logs -l k8s-app=coredns);确认 Pod 的 dnsPolicy 与 /etc/resolv.conf 包含集群 DNS 服务 IP。kubectl get endpoints <svc> 是否为空;检查 selector 是否匹配 Pod 标签;查看 kube-proxy 与节点 iptables/ipvs 规则是否生效(iptables-save | grep <svc-cluster-ip> 或 ipvsadm -Ln)。