云原生

34-ingress应用

2022-02-13  本文已影响0人  紫荆秋雪_文

场景

一、Ingress是什么

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

二、为什么需要Ingress

三、Ingress实战

1、基本配置

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

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
      

四、修改全局配置-ConfigMap

kubectl edit cm ingress-nginx-controller -n ingress-nginx
data: 
  配置项: 配置值

五、Annotations

1、路径重写

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

2、SSL

通过命令创建免费证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.cert
-subj "/CN=itwrw.com/O=itwrw.com"
kubectl create secret tls itwrw-tls --key tls.key --cert tls.cert
image.png
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

申请阿里云免费证书

kubectl create secret tls raven.wang-tls --key raven.wang.key --cert raven.wang.cert
image.png
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、速率限制

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

小结

上一篇 下一篇

猜你喜欢

热点阅读