K8s的ingress资源
Ingress控制器
1)[AKS 应用网关Ingres控制器] 使用 Azure应用程序网关启用AKS集群ingress。
2)mbassador API网关,一个基于Envoy的Ingress控制器,有着来自社区的支持和来自Datawire的商业支持。
3)AppsCode Inc 为最广泛使用的基于HAproxy的Ingress控制器Voyager提供自持和维护。
4)AWS ALB Ingress控制器,通过AWS应用Load Balancer启用Ingress。
5)Contour是一个基于Envoy的Ingress控制器,它由VMware提供和支持。
6)Citrix为其硬件(MPX),虚拟化(VPX)和免费容器化(CPX)ADC提供了一个Ingress控制器,用于裸金属和云部署。
7)F5 Networks为用于Kubernetes的F5 BIG-IP控制器提供支持和维护。
8)Gloo是一个开源的基于Envoy的Ingress控制器,它提供了API网关功能,有着来自solo.io的企业级支持。
9)HAproxy Ingress是HAproxy高度可定制的、由社区驱动的Ingress控制器。
10)HAproxy Technologies为用于Kubernetes的HAproxy Ingress控制器提供支持和维护,具体信息请参考官方文档。
11)基于Istio的ingress控制器,控制Ingress流量。
12)Kong为用于Kubernetes的Kong Ingress控制器提供社区或商业支持和维护。
14)Nginx 为用于Kubernetes的Nginx Ingress控制器提供支持和维护
15)Traefik(小蜜蜂)是一个全功能的Ingress控制器。(Let's Encrypt,secrets,http2,websocket)并且它也有Traefik Labs的商业支持
1.没有ingress之前,pod对外提供服务只能通过NodeIP:NodePort的形式,但是这种形式有缺点,一个节点上的PORT不能重复利用。比如某个服务占用了80,那么其他服务就不能在用这个端口了。
2.NodePort是4层代理,不能解析7层的http,不能通过域名区分流量
3.为了解决这个问题,我们需要用到资源控制器叫Ingress,作用就是提供一个统一的访问入口。工作在7层
4.虽然我们可以使用nginx/haproxy来实现类似的效果,但是传统部署不能动态的发现我们新创建的资源,必须手动修改配置文件并重启。
5.适用于k8s的ingress控制器主流的有nginx-ingress、traefik、haproxy-ingress
了使Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:
- Service是后端真实服务(可以理解为具体的pod)的抽象,一个Service可以代表多个相同的后端服务。
- Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。
- Nginx Ingress Controller是一个反向代理程序(可以理解为套了壳的nginx),负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。
Nginx Ingress Controller通过API Server获取Ingress资源的变化,动态地生成Load Balancer(例如Nginx)所需的配置文件(例如nginx.conf),然后重新加载Load Balancer(例如执行nginx -s load
重新加载Nginx)来生成新的路由转发规则。
部署nginx-ingress
#### 下载资源清单
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml -O nginx-ingress.yaml
修改 Depoloument 资源 改成 DaemonSet 等等。。。。
修改 images为nginx/nginx-ingress:1.7.2
ingress的资源清单的解释
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
spec:
rules:
- host: www.wp.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: wp-svc
port:
number: 80
apiVersion: networking.k8s.io/v1 # 指定 API 版本
kind: Ingress # 资源类型是 Ingress
metadata: # 元数据部分
name: wordpress-ingress # Ingress 的名称
spec: # 规范部分
rules: # 规则部分
- host: www.wp.com # 指定主机名为 'wp'
http: # HTTP 规则部分
paths: # 路径配置
- path: / # 匹配根路径
pathType: ImplementationSpecific # 路径类型
backend: # 后端服务配置
service: # 指定后端服务
name: wp-svc # 服务名称为 'wp-svc'
port: # 指定服务的端口
number: 80 # 端口号为 80