【十期/九章/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层

ll.jpg

Ingress Controller(控制器)

ingress.jpg

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

举例:1.jpg

其他主流控制器:
Traefik:HTTP反向代理、负载均衡工具
lstio:服务治理、控制入口流量

部署 Ingress Controller

ingress-controller.yaml包:ingress-controller.yaml

  1. # 创建ingress-controller.yaml
  2. kubectl apply -f ingress-controller.yaml
  3. # 查看创建的pod是否起来
  4. kubectl get pod -n ingress-nginx #命名空间为ingress-nginx
  5. # 创建ingress规则(验证)
  6. vim ingress.yaml
  7. #以下是ingress的yaml
  8. apiVersion: networking.k8s.io/v1beta1 # Ingress的api
  9. kind: Ingress
  10. metadata:
  11. name: example-ingress # Ingress的名称
  12. spec:
  13. rules:
  14. - host: example.ctnrs.com # 为其配置的域名
  15. http:
  16. paths:
  17. - path: /
  18. backend:
  19. serviceName: web # Service的名称
  20. servicePort: 80 # Service的端口
  21. # 创建ingress.yaml
  22. kubectl apply -f ingress.yaml
  23. # 查看已创建的资源
  24. kubectl get ingress
  25. # "验证"该创建是否生效
  26. 192.168.233.130 example.ctnrs.com # 首先需要绑定本地hosts来模拟访问
  27. # 通过浏览器访问该域名返回Nginx页面则验证成功

通过https来访问

certs.shcfssl.sh

# 将证书脚本放到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高可用方案

考虑高可用的原因: