Kubernetes 与服务发现最佳实践一、前言哥们别整那些花里胡哨的。服务发现是微服务架构的核心今天直接上硬货教你如何在 Kubernetes 中实现高效的服务发现。二、服务发现机制机制适用场景优势劣势DNS集群内服务原生支持缓存延迟环境变量简单场景无需配置不可动态更新Service稳定服务负载均衡配置复杂Endpoints自定义服务灵活管理复杂EndpointSlice大规模服务可扩展性学习成本高三、实战配置1. Service 配置apiVersion: v1 kind: Service metadata: name: app-service namespace: default spec: selector: app: app ports: - port: 80 targetPort: 8080 type: ClusterIP --- apiVersion: v1 kind: Service metadata: name: app-service-external namespace: default spec: selector: app: app ports: - port: 80 targetPort: 8080 type: LoadBalancer2. Endpoints 配置apiVersion: v1 kind: Endpoints metadata: name: app-service namespace: default subsets: - addresses: - ip: 10.0.0.1 - ip: 10.0.0.2 - ip: 10.0.0.3 ports: - port: 8080 protocol: TCP --- apiVersion: v1 kind: EndpointSlice metadata: name: app-service-1 namespace: default labels: kubernetes.io/service-name: app-service spec: addresses: - ip: 10.0.0.1 - ip: 10.0.0.2 ports: - name: http port: 8080 protocol: TCP3. DNS 配置apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance }4. 服务发现使用apiVersion: apps/v1 kind: Deployment metadata: name: app namespace: default spec: replicas: 3 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: nginx:latest env: - name: SERVICE_DISCOVERY value: kubernetes - name: APP_SERVICE_HOST value: app-service.default.svc.cluster.local - name: APP_SERVICE_PORT value: 80 ports: - containerPort: 8080四、服务发现优化1. 健康检查apiVersion: v1 kind: Service metadata: name: app-service namespace: default spec: selector: app: app ports: - port: 80 targetPort: 8080 healthCheckNodePort: 30000 --- apiVersion: apps/v1 kind: Deployment metadata: name: app namespace: default spec: replicas: 3 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: nginx:latest ports: - containerPort: 8080 readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 15 periodSeconds: 202. 服务质量apiVersion: v1 kind: Service metadata: name: app-service namespace: default spec: selector: app: app ports: - port: 80 targetPort: 8080 sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 108003. 负载均衡apiVersion: v1 kind: Service metadata: name: app-service namespace: default annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: true spec: selector: app: app ports: - port: 80 targetPort: 8080 type: LoadBalancer五、常见问题1. 服务不可达解决方案检查服务选择器验证 Pod 状态检查网络策略2. DNS 解析失败解决方案检查 CoreDNS 状态验证服务名称和命名空间检查网络连接3. 负载均衡异常解决方案检查负载均衡器配置验证后端 Pod 健康状态查看服务日志六、最佳实践总结服务定义合理定义服务类型和端口健康检查配置适当的就绪和存活探针负载均衡选择合适的负载均衡策略DNS 配置优化 DNS 解析服务质量配置会话亲和性和超时监控告警监控服务状态和性能七、总结Kubernetes 服务发现是微服务架构的核心。按照本文的最佳实践你可以构建一个高效、可靠的服务发现系统炸了