什么是Service
Service是一种为一组功能相同的Pod提供单一不变的接入点的资源。当Service存在时,他的IP地址和端口不会改变。客户端通过这个IP+端口建立连接,这些连接会被路由到提供该服务的任意一个Pod
上。通过这种方式,客户端不需要知道每个单独的提供服务的Pod的地址。
从下图中可以很清楚的看到Service处于K8s集群中个那一层面:
Nginx ingress概述
Kubernetes
通过kube-proxy
服务实现了Service
的对外发布及负载均衡,它的各种方式都是基于传输层实现的。在实际的互联网应用场景中,不仅要实现单纯的转发,还有更加细致的策略需求,如果使用真正的负载均衡器更会增加操作的灵活性和转发性能。
基于以上需求,Kubernetes
引入了资源对象Ingress
,Ingress
为Service
提供了可直接被集群外
部访问的虚拟主机、负载均衡、SSL
代理、HTTP
路由等应用层转发功能。
Nginx ingress版本
Nginx官方版本
- Nginx开源版
- Nginx plus版
Kubernetes社区版本
Nginx ingress工作原理
资源对象、Ingress控制器、Nginx实例
Nginx ingress安装
下载Nginx ingress 部署yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
修改部分选修:
- 去掉externalTrafficPolicy: Local
- 把
registry.k8s.io
替换成功registry.cn-hangzhou.aliyuncs.com/google_containers
,因为 国内无法从k8s.gcr.io拉取到,所以先从阿里云拉取
详细请查阅官方文档地址
Nginx ingress基本使用
apiVersion: extensions/vlbeta1 kind: Ingress metadata: name: ingress-myapp namespace: default annotations: kubernetes.io/ingress.class:"nginx" spec: rules: - host: myapp demo-inaress.com http: paths: - path: backend: serviceName: myapp servicePort: 80
K8s Ingress简介
背景:K8s集群内的网络与外部是隔离的,即在K8s集群外部无法直接访问集群内服务
NodePort
- NodePort每个端口只能挂载一个Service
- Node节点必须具备公网IP
- 端口范围只能是30000-32767
LoadBalancer
- 四层流量转发
- 每个LoadBalancer只能对应一个Service,无法暴露多个Service
Ingress
- 七层流量治理,HTTP/HTTPS
- 多个Service:共享Ingress
K8s Ingress现状
k8s标准的Ingress资源
扩展
利用Annotations扩展高级治理能力
基于CRD定义新的流量治理资源,例如Istio中的Gateway,VirtualService
流量隔离
- 外网、内网Ingress Provoider独立部署
- 南北向,东西向流量隔离
- 缩小爆炸半径
灰度发布
场景:业务速度迭代快,升级过程如何保证业务对外服务的高可用
问题:
1、如何减少升级的影响面
2、如何快速回滚
3、如何解决标准Ingress不支持流量拆分问题
按照Header灰度
以Ingress-Nginx为例:
- 通过Annotation拓展
- 创建灰度Ingress,配置灰度头部key以及value
- 灰度流量验证完毕后,切换正式Ingress到新版本
按照权重灰度
业务域拆分
根据业务域设计对外暴露的API
设计原则
- 以微服务各个业务域含义作为API路径前缀
- Ingress Provider负责去掉业务域前缀
优点
- .易于管理维护
- 便于认证鉴权
- 便于观测统计
性能调优
系统内核参数调优
- 调大TCP连接队列的容量:net.core.somaxconn
- 调大可用端口范围:net.ipv4.ip_local_port_range
- 复用TCP连接:net.ipv4.tcp_tw_reuse
TLS硬件加速
- 采用方案二,即利用CPU的SIMD机制通过AVX-512指令并行处理来提升RSA/ECDSA性能。
- 1C2G压测HTTPS QPS从1004提升到1873,提升约86%。
- TLS握手RT从313.84ms降到145.81ms,下降一倍