安装k8s desktop
git clone https://github.moeyy.xyz/https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
sh load_images.sh
kubectl env
open -e ~/.bash_profile
export PATH="/Applications/Docker.app/Contents/Resources/bin:$PATH"
source -e ~/.bash_profile
通过LoadBalancer 暴露服务
kubectl expose deployment my-deployment --type=LoadBalancer --port=80
为什么需要ingress
如果我们只是需要 四层代理
* k8s 对外提供服务,只能通过cluterIP、nodeport、extranName、loadbalance等方式
* serivce 的 cluterIP 是一个域名将一组 pod 通过Endpoints 关联起来作为一个完整服务
* 通过 kube-porxy 从将coredns中获取cluterIP的Endpoints,然后将Iptable/ipvps 规则写入宿主机实现kube-porxy路由转发功能
kube-porxy 优化
* v1.41默认使用 iptables代理 、之后使用ipvps 做proxy 通过kube-porxy
缺点只能IP、port 转发
* 提供了 headerless servcie 实现转发指定pod 但是会失去负载均衡和DNS解析
因此 默认cluterIP直接对应到pod ip port
不经过kube-porxy core 的负债均衡也是失效
七层应用层代理 ingress
* 可以直接 通过nginx 负载到 pod 实现流量的精细控制
* /api/ 路由到一个指定的service 或者pod
* 四层代理无法做到这一点
ingress 是如何直接跳过kube-proxy
ingress Controller借助service的服务发现机制,实现配置的动态更新以实现Pod的负载均衡机制实现
客户端请求发出后 ingress Controller 根据 Ingress 规则确定要将请求转发到哪个 Service 上
Ingress Controller 会查询 Kubernetes 的 API 服务器,获取与该 Service 相关联的 Endpoints的 Pod 的IP地址列表
主流的Ingress Controller
传统的七层负载均衡如Nginx,HAproxy,
优点: 成熟,高性能
缺点: 动态更新需reload配置文件
新型微服务负载均衡如Traefik,Envoy,Istio
优点: 专门适用于微服务+容器化应用场景、动态更新
缺点: 性能还有待提升
使用nginx + lua 可以高性能又可以动态更新 例如 kong、openresty、apisix
Ingress Controller 存在方式
ingress-controller的形式都是一个pod,里面跑着daemon程序和反向代理程序
Ingress Controller 工作原理
监听API Server,获取全部Ingress的定义
基于Ingress的定义,生成Nginx所需的配置文件/etc/nginx/nginx.conf
执行nginx -s reload命令,重新加载nginx.conf配置文件的内容
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...