美文网首页云原生
34-ingress应用

34-ingress应用

作者: 紫荆秋雪_文 | 来源:发表于2022-02-13 11:22 被阅读0次

场景

  • 在微服务项目中,使用gateway网关来路由到不同请求
  • 在多项目中可以通过Nginx来路由不同项目
  • 在k8s中是使用Ingress来实现路由到不同Service服务

一、Ingress是什么

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规则控制

  • 下面是一个将所有流量都发送到同一Service的简单 Ingress 示例: image.png

二、为什么需要Ingress

  • Service 可以使用NodePort暴露集群外访问端口,但是性能低下不安全
  • 缺少 Layer7 的统一访问入口,可以负载均衡、限流等
  • 可以使用 Ingress 作为整个集群统一的入口,配置 Ingress 规则转到对应的Service image.png

三、Ingress实战

  • Ingress本质上就是Nginx,现在不需要直接修改Nginx配置文件,只需创建Ingress资源就可以修改Nginx配置文件了
  • Prefix:基于以/分隔的URL路径前缀匹配。匹配区分大小写,并且对路径中的元素逐个完成。路径元素指的是由/分隔符分隔的路径中的标签列表。如果每个p都是请求路径p的元素前缀,则请求与路径p匹配
  • Exact:精确匹配 URL 路径,且区分大小写
  • ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。具体实现可以将其作为单独的 pathType 处理或者与 Prefix 或 Exact 类型作相同处理

1、基本配置

  • ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-01
  namespace: raven
spec:
  rules:
  - host: itwrw.com   # 识别域名
    http:
      paths:
      - path: /       # 识别路径
        pathType: Prefix  # 匹配类型
        backend:
          service:
            name: svc-02  # 路由到 Service
            port:
              number: 80
情况一.png
情况二.png
情况三.png

修改path

  • ingress-02.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-02
  namespace: raven
spec:
  rules:
  - host: itwrw.com   # 识别域名
    http:
      paths:
      - path: /test       # 识别路径
        pathType: Prefix  # 匹配类型
        backend:
          service:
            name: svc-02  # 路由到 Service
            port:
              number: 80
修改path.png
image.png

默认配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-default
  namespace: raven
spec:
  defaultBackend:
    service: 
      name: tomcat-svc
      port: 
        number: 80
  rules:
  - host: itwrw.com
    http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
      
  • 默认兜底页面 image.png

四、修改全局配置-ConfigMap

  • 编辑全局配置文件
kubectl edit cm ingress-nginx-controller -n ingress-nginx
  • 在全局配置文件添加,设置具体配置项参考文档
data: 
  配置项: 配置值

五、Annotations

1、路径重写

  • yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-default
  namespace: raven
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  defaultBackend:
    service: 
      name: tomcat-svc
      port: 
        number: 80
  rules:
  - host: itwrw.com
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
  • 上面的入口定义将导致以下重写:
    • itwrw.com/api 重写为 itwrw.com/
    • itwrw.com/api/ 重写为 itwrw.com/
    • itwrw.com/api/new 重写为 itwrw.com/new

2、SSL

通过命令创建免费证书

  • 创建证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.cert
-subj "/CN=itwrw.com/O=itwrw.com"
  • 创建secret资源
kubectl create secret tls itwrw-tls --key tls.key --cert tls.cert
image.png
  • 配置 secret 的yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-default
  namespace: raven
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
    - hosts:
        - itwrw.com
      secretName: itwrw-tls
  defaultBackend:
    service: 
      name: tomcat-svc
      port: 
        number: 80
  rules:
  - host: itwrw.com
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
image.png
证书无效.png

申请阿里云免费证书

  • 在阿里云中搜索SSL
  • 创建免费证书 image.png
  • 申请证书 image.png
  • 下载证书 image.png
  • 通过证书生成 secret 资源
kubectl create secret tls raven.wang-tls --key raven.wang.key --cert raven.wang.cert
image.png
  • tls.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-raven-tls
  namespace: raven
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
    - hosts:
        - raven.wang
      secretName: raven.wang-tls
  defaultBackend:
    service: 
      name: tomcat-svc
      port: 
        number: 80
  rules:
  - host: raven.wang
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
image.png

3、速率限制

  • 配置nginx.ingress.kubernetes.io/limit-rps: "1"来限速
  • yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-raven-tls
  namespace: raven
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/limit-rps: "1"
spec:
  tls:
    - hosts:
        - raven.wang
      secretName: raven-tls
  defaultBackend:
    service: 
      name: tomcat-svc
      port: 
        number: 80
  rules:
  - host: raven.wang
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
image.png

4、灰度发布-Canary

Canary-Ingress.png

1、普通ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary-01
  namespace: raven
spec:
  rules:
  - host: raven.wang
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-02
            port:
              number: 80
image.png

2、带有canary-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary-02
  namespace: raven
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"  # 设置为 灰度发布
    nginx.ingress.kubernetes.io/canary-by-header: "canary-header" # 请求头字段
    nginx.ingress.kubernetes.io/canary-by-cookie: "canary-cookie" # cookie字段
    nginx.ingress.kubernetes.io/canary-weight: "50" # 设置权重
spec:
  rules:
  - host: raven.wang
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat-svc
            port:
              number: 80
image.png
image.png
  • 上面的是按照权重策略来执行

  • 请求时添加canary-header


    image.png
    image.png
  • cookie 用法


    image.png
    image.png
  • header与cookie混用 image.png

小结

  • Canary 规则按优先顺序进行评估。优先顺序如下:canary-by-header -> canary-by-cookie -> canary-weight

相关文章

  • 34-ingress应用

    场景 在微服务项目中,使用gateway网关来路由到不同请求 在多项目中可以通过Nginx来路由不同项目 在k8s...

  • 应用

    【应用】 $应用$ 【应用名称】王者荣耀【应用名称】 【应用介绍】5v5对战手游【应用介绍】 $应用$ 【应用名称...

  • Day17 - Flutter - 应用信息配置

    概述 应用标识 应用名称 应用图标 应用启动图 一、应用标识 1.1. Android应用标识Android应用标...

  • 程序员必须掌握的英语单词

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • 程序员600词

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • 2018-12-01

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 拍砖推荐(收藏了慢慢看)!!!

    application 应用程式 应用、应用程序application framework 应用程式框架、应用框架...

  • words for IT guys

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 程序员必会的600个英文单词

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

  • 程序员必备词汇

    application 应用程式 应用、应用程序 application framework 应用程式框架、应用框...

网友评论

    本文标题:34-ingress应用

    本文链接:https://www.haomeiwen.com/subject/cyimkrtx.html