k8s学习整理-service
程序员文章站
2024-03-11 16:53:13
...
近期通过网课学习了李振良老师kubernetes教程。根据老师的课堂内容笔记做了相关的整理,以便于加深理解和后期自查
Pod与services关系
动态感知pod的IP,并对外提供访问入口
- 底层实现主要有iptables与ipvs两种网络模式
apiVersion: v1
kind: Service
metadata:
name: service_name
namespace: default
spec:
clusterIP: 10.0.0.1 # 指定一个IP
ports:
- name: http
protocol: tcp
port: 80 # service暴露端口
targetPort: 80 # containers端口
selector: # 选择标签
all: nginx
Service 意义
- 防止pod失联(服务发现)
- 定义一组Pod访问策略(负载均衡)
- 支持ClusterIP,NodePort,LoadBalancer三种类型
Service 类型
- clusterIP
- 默认。分配一个集群内部的VIP
- NodePort
- 已知node与port的前提下,可以搭建lvs做负载均衡
- 用户 -> 域名 -> 负载均衡 -> NodeIp:Port -> PodIp:Port
- LoadBalancer
- 工作在特地的cloud,如AWS,Google Cloud
-ipvsadm
+ ipvsadmin -ln
- 查看service转换策略
service 代理模式
kube-proxy
实现流量转发规则
iptables与ipvs
-
支持ipvs
- kube-proxy.yaml
- mode: ipvs
- 基于内核ipvs模块支持负载均衡
- 优缺点
- 工作在内核状态,更好的性能
- 调度算法丰富: rr, wrr, lc, wlc ,ip hash
- kube-proxy.yaml
-
支持iptables
- kube-proxy.yaml
- mode : iptales
- iptables会创建很多规则
- 非增量更新
- iptables逐级匹配,延时
- 优缺点
- 灵活,功能强大
- 规则遍历更新和匹配,呈线性延迟
- kube-proxy.yaml
coredns
- DNS服务器会监视kube-apiserver,为每一个service创建DNS记录用于域名解析
- 格式: .<service.namespace>.svc.cluster.local
- namespace如果不指定,则解析当前namespace的service