Kubernetes 进阶

Kubernetes 进阶

Service 控制器
Ingress 对象(对外暴露应用)
管理应用程序配置
K8s 数据卷与持久数据卷
再谈有状态应用部署:StatefulSet控制器
K8s 安全访问控制
K8s 部署利器Helm初探

Service 控制器

Service存在的意义
Pod与Service的关系
Service定义与创建
Service三种类型
Service代理模式
Service DNS名称

Service 存在的意义

Service引入主要是解决Pod的动态变化,提供统一访问入口:
防止Pod失联,找到提供同一个服务的Pod(服务发现)
定义一组Pod的访问策略(负载均衡)

Pod与Service的关系

Service通过标签关联一组Pod
Service为一组Pod提供负载均衡能力

Service定义与创建

创建service:
kubectl apply -f service.yaml
查看service:
kubectl get service
apiVersion: v1
kind: Service
metadata:
labels:
app: web
name: web
spec:
type: ClusterIP # 服务类型
ports:
- port: 80 # Service端口
protocol: TCP # 协议
targetPort: 80 # 容器端口
selector:
app: web # 指定关联Pod的标签

定义Service

多端口Service定义: 对于某些服务,需要公开多个端口,
Service也需要配置多个端口定义,通过端口名称区分。
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: web

多端口Service定义 

Service三种常用类型

ClusterIP:默认分配一个稳定的IP地址,即VIP,只能在集群内部访问。  

spec:
type: ClusterIP
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: web

NodePort: 在每个节点上启用一个端口来暴露服务,可以在集群
外部访问。也会分配一个稳定内部集群IP地址。
访问地址:<任意NodeIP>:<NodePort>
默认NodePort端口范围:30000-32767
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80
nodePort: 30009
selector:
app: web

 

NodePort: 会在每台Node上监听端口接收用户流量,在实际情
况下,对用户暴露的只会有一个IP和端口,那这么多台Node该使
用哪台让用户访问呢?
这时就需要前面加一个公网负载均衡器为项目提供统一访问入口了。

 

LoadBalancer: 与NodePort类似,在每个节点上启用一个端口来暴
露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾
讯云、AWS等)上的负载均衡器,将每个Node
([NodeIP]:[NodePort])作为后端添加进去。

Service代理模式 

Service的底层实现主要有iptables和ipvs二种网络模式,决定了如何转发流量。 

kubeadm方式修改ipvs模式:

# kubectl edit configmap kube-proxy -n kube-system
...
mode: “ipvs“
...
# kubectl delete pod kube-proxy-btz4p -n kube-system
注:
1、kube-proxy配置文件以configmap方式存储
2、如果让所有节点生效,需要重建所有节点kube-proxy pod

二进制方式修改ipvs模式:
# vi kube-proxy-config.yml 
mode: ipvs
ipvs:
scheduler: "rr“
# systemctl restart kube-proxy
注:配置文件路径根据实际安装目录为准
流程包流程:客户端 ->NodePort/ClusterIP(iptables/Ipvs负载均衡规则) -> 分布在各节点Pod
查看负载均衡规则:
iptables模式
iptables-save |grep <SERVICE-NAME>
ipvs模式
ipvsadm -L -n
        Service工作流程图
Iptables VS IPVS
Iptables:
灵活,功能强大
规则遍历匹配和更新,呈线性时延
IPVS:
工作在内核态,有更好的性能
调度算法丰富:rr,wrr,lc,wlc,ip hash...

Service DNS名称 

CoreDNS:是一个DNS服务器,Kubernetes默认采用,以Pod部署在集群中,
CoreDNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
ClusterIP A记录格式: <service-name>.<namespace-name&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主主主主公

你的鼓励将大动力作的最是我创

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值