九、kubernetes 1.29 之 service-Endpoint
一、Endpoints 与 pod
1、关联
service和endpoint 是同名的
2、分类
自动关联体系:配置selectro
手动关联体系:无配置selector
2.1 自动关联体系
service加了标签匹配后,会自动创建一个同名的endpoints
kubectl get endpoints
2.2 手动关联体系
手动匹配,service和endpoints 必须名字和名称空间都一样才能匹配
灵活,可以添加
service资源定义
apiVersion: v1
kind: Service
metadata:name: nginx
spec:ports:- protocol: TCPport: 6666targetPort: 80
Endpoints 资源定义
apiVersion: v1
kind: Endpoints
metadata:name: nginx
subsets:- addresses:- ip: 192.168.66.12ports:- port: 80#如果有多个ip需要跟踪
addresses:- ip: 192.168.66.12- ip:xxx.xxx.xx.x....
为了让192.168.66.12出现80端口,这里起一个docker容器
docker run -itd -p 80:80 --net host wangyanglinux/myapp:v1
二、公开未就绪的pod
pod资源清单
apiVersion: v1
kind: Pod
metadata:name: readiness-httpget-podnamespace: defaultlabels:app: myappenv: test
spec:containers:- name: readiness-httpget-containerimage: wangyanglinux/myapp:v1.0imagePullPolicy: IfNotPresentreadinessProbe:httpGet:port: 80path: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3
Service 资源清单
apiVersion: v1
kind: Service
metadata:labels:app: myappname: myapp
spec:ports:- name: httpport: 80protocol: TCPtargetPort: 80selector:app: myapptype: ClusterIPpublishNotReadyAddresses: true
对于当前的pod来说,不满足就绪状态,所以不会被 service抓取
可以对此修改
# 添加 publishNotReadyAddresses 属性的修补命令
kubectl patch service myapp -p '{"spec":{"publishNotReadyAddresses": true}}'
再去去访问发现成功,
三、service小总结
Service
工作原理
userspace
kube-proxy
监听 APISERVER 将 Service 变化修改本地的 iptables 规则
代理来自当前节点 pod 的用户请求
iptables
kube-proxy
监听 APISERVER 将 Service 变化修改本地的 iptables 规则
优点:相对于 userspace,kube-proxy 功能解耦,压力较小
LAAS 负载均衡即服务
ipvs
NAT √
DR
TUN
svc 选中 pod 的逻辑
pod 是处于就绪状态
pod 的标签是 svc 标签的集合(同一个名字空间下)
yaml > kubectl > ApiServer
yaml json
windows
https://cloudmessage.top/archives/k8s-zai-windowszhong-shi-yong-kubectllian-jie-ji-qun
svc dns 域名
svcName.nsName.svc.domainName.
domainName cluster.local.
LVS 持久化连接
ipvsadm -A -t 192.168.66.100:80 -s rr -p 120
应用场景:HTTPS 请求
SVC
CLUSTERIP
internalTrafficPolicy
Cluster:默认值
Local:
流量只会通向访问节点所在的pod,如果当前节点没有运行 pod ,当前请求会被 Drop 而不是 Reject
NodePort
externalTrafficPolicy
Cluster:默认值
Local:
流量只会通向访问节点所在的pod,如果当前节点没有运行 pod ,当前请求会被 Drop 而不是 Reject