【十期/九章/43:00】
1、Ingress为弥补NodePort不足而生
2、Pod与Ingress的关系
3、Ingress Controller
4、Ingress
5、Annotations对Ingress个性化配置
6、Ingress Controller高可用方案
**
Ingress为弥补NodePort不足而生
NodePort存在的不足:
- 一个端口只能一个服务使用,端口需提前规划
- 只支持4层负载均衡
Pod与Ingress的关系
- Ingress通过service与pod相关联
通过Ingress Controller实现Pod的负载均衡
- 支持TCP/UDP 4层和HTTP 7层
Ingress Controller(控制器)
Ingress Controller有很多实现方法,这里采用的是官方维护的Nginx控制器
github(ingress-controller.yaml):
https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
注意事项:
- 镜像地址修改为国内的:lizhenliang/nginx-ingress-controller:0.20.0
- 使用宿主机网络:hostNetwork:true
举例:
其他主流控制器:
Traefik:HTTP反向代理、负载均衡工具
lstio:服务治理、控制入口流量
部署 Ingress Controller
ingress-controller.yaml包:ingress-controller.yaml
# 创建ingress-controller.yaml
kubectl apply -f ingress-controller.yaml
# 查看创建的pod是否起来
kubectl get pod -n ingress-nginx #命名空间为ingress-nginx
# 创建ingress规则(验证)
vim ingress.yaml
#以下是ingress的yaml
apiVersion: networking.k8s.io/v1beta1 # Ingress的api
kind: Ingress
metadata:
name: example-ingress # Ingress的名称
spec:
rules:
- host: example.ctnrs.com # 为其配置的域名
http:
paths:
- path: /
backend:
serviceName: web # Service的名称
servicePort: 80 # Service的端口
# 创建ingress.yaml
kubectl apply -f ingress.yaml
# 查看已创建的资源
kubectl get ingress
# "验证"该创建是否生效
192.168.233.130 example.ctnrs.com # 首先需要绑定本地hosts来模拟访问
# 通过浏览器访问该域名返回Nginx页面则验证成功
通过https来访问
# 将证书脚本放到master中并执行(目的时生成自签证书)
bash cfssl.sh
# 修改certs.sh脚本中的CN域名参数
vim certs.sh
# 以下是需修改的参数
"CN": "example.ctnrs.com" # 修改该配置为需访问的域名,也就是为这个域名颁发证书
tls example-ingress --cert=example.ctnrs.com.pem --key=example.ctnrs.com-key.pem # 该参数为最后一行
注:tls后的为ingress-https.yaml中的secretName的参数,--cert和--key都为要访问的域名
# 将certs.sh放到新创建的ssl目录中执行
mkdir ssl
bash certs.sh
# 编写并创建ingress-https.yaml文件
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress # 该ingress的名称
spec:
tls:
- hosts:
- example.ctnrs.com # 该配置为访问的域名
secretName: example-ingress # 该配置为certs.sh脚本最后一行的tls参数
rules:
- host: example.ctnrs.com # 该配置为访问的域名
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
# "验证"该创建是否生效
192.168.233.130 example.ctnrs.com # 需要绑定本地hosts来模拟访问
# 通过浏览器访问该域名返回Nginx页面则验证成功
https://example.ctnrs.com
Ingress-根据URL路由到多个服务
Ingress-基于名称的虚拟主机
Annotation对Ingress个性化配置
Ingress Controller高可用方案
考虑高可用的原因: