Ingress介绍
概念
Ingress是kubernetes1.1之后官方提出的一个标准,按照这套标准它有多种实现,比如 nginx-ingress-controller、traefik-ingress-controller、kong-ingress-controller,这3中都是官方推荐的。Ingress的出现解决了Service的短板:只能在tcp层面做负载均衡。而ingress可以方便的做http/https层面的负载均衡。一个是在4层,一个在7层。ingress就是控制客户端从入口连接到k8s集群服务的规则的集合!
ingress出现之前,服务暴露是这样的:
ingress出现之后,服务暴露是这样的:
可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。ingress-controller负责实现了ingress这套标准,一般使用的是负载均衡。
使用ingress之前,必须要先部署ingress-controller,不然把ingress部署起来也没用,它不会产生实际作用。
Ingress格式
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: test
servicePort: 80
每个Ingress都需要配置rules。
根据Ingress Spec配置的不同,Ingress可以分为以下几种类型:
单服务Ingress
单服务Ingress即该Ingress仅指定一个没有任何规则的后端服务。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
backend:
serviceName: testsvc
servicePort: 80
路由到多服务的Ingress
路由到多服务的Ingress即根据请求路径的不同转发到不同的后端服务上,比如
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: s1
servicePort: 80
- path: /bar
backend:
serviceName: s2
servicePort: 80
虚拟主机Ingress
虚拟主机Ingress即根据Host header的不同转发到不同的后端服务上,如下所示
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: s1
servicePort: 80
- host: bar.foo.com
http:
paths:
- backend:
serviceName: s2
servicePort: 80
- 注:没有定义规则的后端服务称为默认后端服务,可以用来方便的处理404页面。
k8s官方ingress文档:https://kubernetes.io/docs/concepts/services-networking/ingress/
traefik-ingress-controller使用:https://laoxianyu.cn/archives/208297ce.html
技术交流可加QQ群:774332965
微信订阅号同步:时下IT