成功最有效的方法就是向有经验的人学习!

ingress-nginx配置

Ingress 注释 annotations 说明

在 Kuberneters 中基础的配置 Ingress 只需要在 path 中设置好后端的 service 名称和 service 的clusterIP端口即可。
当我们使用 Nginx Ingress Controller 时,其 Pod 中实际上就是运行了一个nginx实例,我们通过设置 Ingress 对象向 Nginx 实例中添加规则。
我们在配置 Nginx 服务的规则时,会添加一些特殊的设置,比如:超时时间、消息体大小、域名证书等。而我们在 Ingress 中添加相似的配置,就需要使用 Annotations (注释) 来实现。

1、金丝雀发布
金丝雀发布是一种试错的发布新版本的方式;将新版本接受的请求数逐渐增加,如果发下新版本存在问题,即使的回滚。

nginx.ingress.kubernetes.io/backend-protocol
nginx.ingress.kubernetes.io/canary
nginx.ingress.kubernetes.io/canary-by-header
nginx.ingress.kubernetes.io/canary-by-header-value
nginx.ingress.kubernetes.io/canary-by-header-pattern
nginx.ingress.kubernetes.io/canary-by-cookie
nginx.ingress.kubernetes.io/canary-weight

2、Rewrite URL 重写
某些情况下,后端服务中暴漏的URL地址和对客户展示的URL(入口规则)是不同的。这时候需要对地址进行重写。

nginx.ingress.kubernetes.io/rewrite-target
nginx.ingress.kubernetes.io/app-root

3、会话关联
当后端上游服务有多个实例时,通过设置会话关联;将一个用户的所有访问请求,转发到同一个服务实例上。

nginx.ingress.kubernetes.io/affinity
nginx.ingress.kubernetes.io/affinity-mode
nginx.ingress.kubernetes.io/session-cookie-name
nginx.ingress.kubernetes.io/session-cookie-path
nginx.ingress.kubernetes.io/session-cookie-samesite
nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none

4、Authentication 认证
可以添加身份验证,在入口规则中添加其他注释。身份验证的源是包含用户名和密码的机密。

nginx.ingress.kubernetes.io/auth-type: [basic|digest]
nginx.ingress.kubernetes.io/auth-secret: secretName
nginx.ingress.kubernetes.io/auth-secret-type: [auth-file|auth-map]
nginx.ingress.kubernetes.io/auth-realm: “realm string”

5、自定义Nginx 的上游服务器的哈希hash
NGINX支持基于给定密钥的一致散列的客户机-服务器映射的负载平衡。
有一种特殊的上游哈希模式叫做子集。在这种模式下,上游服务器被分组到子集中,粘性通过将键映射到子集而不是单个上游服务器来工作。特定服务器是从选定的粘性子集中随机统一选择的。它提供了粘性和负载分布之间的平衡。

nginx.ingress.kubernetes.io/upstream-hash-by: “$request_uri”
nginx.ingress.kubernetes.io/upstream-hash-by-subset

6、客户端证书认证

nginx.ingress.kubernetes.io/auth-tls-secret: secretName
nginx.ingress.kubernetes.io/auth-tls-verify-depth
nginx.ingress.kubernetes.io/auth-tls-verify-client
nginx.ingress.kubernetes.io/auth-tls-error-page
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream

7、自定义HTTP错误

nginx.ingress.kubernetes.io/custom-http-errors

8、默认后端服务

nginx.ingress.kubernetes.io/default-backend:

9、传输速率限制

nginx.ingress.kubernetes.io/limit-connections
nginx.ingress.kubernetes.io/limit-rps
nginx.ingress.kubernetes.io/limit-rpm
nginx.ingress.kubernetes.io/limit-rate-after
nginx.ingress.kubernetes.io/limit-rate
nginx.ingress.kubernetes.io/limit-whitelist

示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fe
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: todo.qikqiak.com
    http:
      paths:
      - backend:
          serviceName: fe
          servicePort: 3000
        path: /app(/|$)(.*)

直接访问域名肯定是不行了,因为我们没有匹配 / 的 path 路径
这是因为我们在 path 中通过正则表达式 /app(/|$)(.*) 将匹配的路径设置成了 rewrite-target 的目标路径了,所以我们访问 xxxx.com/app 的时候实际上相当于访问的就是后端服务的 / 路径

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fe
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;  # 添加 /app 前缀
      rewrite ^/images/(.*)$ /app/images/$1 redirect;  # 添加 /app 前缀
spec:
  rules:
  - host: todo.qikqiak.com
    http:
      paths:
      - backend:
          serviceName: fe
          servicePort: 3000
        path: /app(/|$)(.*)

解决我们访问主域名出现 404 的问题,我们可以给应用设置一个 app-root 的注解,这样当我们访问主域名的时候会自动跳转到我们指定的 app-root 目录下面

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fe
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/app-root: /app/
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;  # 添加 /app 前缀
      rewrite ^/images/(.*)$ /app/images/$1 redirect;  # 添加 /app 前缀
spec:
  rules:
  - host: todo.qikqiak.com
    http:
      paths:
      - backend:
          serviceName: fe
          servicePort: 3000
        path: /app(/|$)(.*)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fe
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/app-root: /app/
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/app)$ $1/ redirect;
      rewrite ^/stylesheets/(.*)$ /app/stylesheets/$1 redirect;
      rewrite ^/images/(.*)$ /app/images/$1 redirect;
spec:
  rules:
  - host: todo.qikqiak.com
    http:
      paths:
      - backend:
          serviceName: fe
          servicePort: 3000
        path: /app(/|$)(.*)

跨域配置
file

在Ingress中,跨域(CORS)的配置如下:

nginx.ingress.kubernetes.io/cors-allow-headers: >-
      DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
    nginx.ingress.kubernetes.io/cors-allow-methods: 'PUT, GET, POST, OPTIONS'
    nginx.ingress.kubernetes.io/cors-allow-origin: '*'
    nginx.ingress.kubernetes.io/enable-cors: 'true'

VUE项目配置

nginx.ingress.kubernetes.io/configuration-snippet: |
      try_files $uri $uri/ $uri/index.html /index.html; 

启用basic auth


htpasswd -c auth user1
kubectl -n <namespace> create secret generic basic-auth --from-file=auth
secret "basic-auth" created

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus
  namespace: monitoring
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - user1"
spec:
  rules:
    - host: prom.xxxxx.im
      http:
        paths:
          - path: /
            backend:
              serviceName: prometheus-svc
              servicePort: 9090
赞(2) 打赏
未经允许不得转载:陈桂林博客 » ingress-nginx配置
分享到

大佬们的评论 1

  1. #1

    官方配置: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap

    admin3年前 (2021-12-10)回复

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册