k8s服务service相关
1.service工作原理
service 工作原理有三种模式:
- userspace:kube-proxy 监听 APIServer,修改本地 iptables 规则,代理用户请求
- iptables:kube-proxy 功能解耦,压力较小
- ipvs:性能最优
svc DNS 域名格式: svcName.nsName.svc.cluster.local.
a.service-userspace

b.service-iptables

c.service-ipvs

# 修改ipvs模式
kubectl edit configmaps kube-proxy -n kube-system
# mode: ipvs
kubectl delete pod -n kube-system -l k8s-app=kube-proxy
2.service 工作类型

a.ClusterIP(默认)
集群内部可访问,外部不可访问。
kubectl create svc clusterip myapp --tcp=80:80
b.NodePort
在每个节点上开放一个静态端口(30000-32767),外部可通过 NodeIP:NodePort 访问。
c.LoadBalancer
结合云供应商的负载均衡器使用,提供外部访问入口。
d.ExternalName
将 Service 映射到外部 DNS 名称(CNAME)。
kind: Service
apiVersion: v1
metadata:
name: my-service-1
spec:
type: ExternalName
externalName: www.baidu.com
3.service 组件协同

4.Endpoint
自动关联:配置 selector
Service 通过 selector 自动关联 Pod,创建同名的 Endpoints。
手动关联:无配置 selector
apiVersion: v1
kind: Service
metadata:
name: nginx-noselect
spec:
ports:
- protocol: TCP
port: 6666
targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
name: nginx-noselect
subsets:
- addresses:
- ip: 192.168.123.12
ports:
- port: 80
5.publishNotReadyAddresses
默认情况下 Service 只匹配就绪状态的 Pod。设置 publishNotReadyAddresses: true 后可匹配未就绪 Pod。
kubectl patch service myapp -p '{"spec":{"publishNotReadyAddresses": true}}'