Ingress 常用的10个配置(annotation)

目录

一、ingress class

二、强制https

三、请求超时

四、跨域访问

五、限流

六、允许最大body

七、客户端白名单

八、默认服务

九、access log开关

十、snippet 添加自定义配置 (比如:新增请求头)


Nginx Ingress注解Annotations

Nginx Ingress 注解使用在 Ingress 资源实例中,IIngress 可以理解就是nginx,作为nginx当然可以对接收到的流量做一些处理
 

一、ingress class

  • 如果一个k8s 集群里面部署多个ingress controller的时候,如果配置ingress 希望指定到某个ingress controller的时候,ingress claas就发挥巨大作用了。
  • 一方面在controller启动的时候需要通过参数指定ingress class;
--ingress-class=ingress-other
  • 另一方面,在创建ingress的时候,通过annotation指定ingress class,如下所示;
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: other-ngx-k8s
  namespace: other-ngx
  annotations:
    kubernetes.io/ingress.class: "ingress-other"
spec:
  rules:
  - host: pyenv.cc
    http:
      paths:
      - path: /
        backend:
          serviceName: golang-pyenv-cc
          servicePort: 9001

二、强制https

  • nginx.ingress.kubernetes.io/force-ssl-redirect: "true"通过这个annotation可以强制 https,如果是http请求,会通过 301 redirect到 https
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/preserve-trailing-slash: "true"
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

三、请求超时

  • nginx.org/proxy-connect-timeout 和nginx.org/proxy-read-timeout 这两个参数分别设置nginx的建立连接以及等待结果的超时时间
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-with-annotations
  annotations:
    nginx.org/proxy-connect-timeout: "30s"
    nginx.org/proxy-read-timeout: "20s"
spec:
  rules:
  - host: demp.example.com
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

四、跨域访问

  • 我们经常将nginx作为api的网关,支持跨域必不可少。通过 nginx.ingress.kubernetes.io/cors-allow-methods 设置支持跨域请求的方法。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
    nginx.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO"
    nginx.ingress.kubernetes.io/cors-expose-headers: "*, X-CustomResponseHeader"
    nginx.ingress.kubernetes.io/cors-max-age: 600
    nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

五、限流

  • 通过 rps 限制每秒请求数,rpm 限制每分钟请求数,connections限制连接数
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/limit-rps: "5"
    nginx.ingress.kubernetes.io/limit-rpm: "300"
    nginx.ingress.kubernetes.io/limit-connections: "10"
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

六、允许最大body

  • 这个主要是针对外部请求,防止将流量打满,proxy-body-size 设置最大请求 body,如果超过则会返回 413 请求错误。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 8m
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test

七、客户端白名单

  • 主要是用于安全限制,只允许特定的客户端请求,但由于现在网络中NAT的广泛应用,这个参数使用的场景比较有限。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
     ingress.kubernetes.io/whitelist-source-range: "10.1.0.0/24,172.10.0.1"
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test

八、默认服务

  • 当客户端请求一个不存在的path的时候,我们不希望返回 404 ,跳转到一个默认的服务上。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
     nginx.ingress.kubernetes.io/default-backend: 
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test

九、access log开关

  • nginx ingress 默认是开启access log的,如果你想关闭,可以通过将 nginx.ingress.kubernetes.io/enable-access-log 设置成false
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
     nginx.ingress.kubernetes.io/enable-access-log: "false"
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test

十、snippet 添加自定义配置 (比如:新增请求头)

  • 比如在有些时候我们需要在 server 里或者 location 里添加一些参数,例如添加包体大小限制、添加跨域配置、添加自定义header、处理响应header等等。遇到这些需求的时候,我们开始怀念原生的 nginx 配置,因为那样我们可以随心所欲的修改。
  • 我们有这样的需求,官方在做这个的时候,也做了一些考虑,为了我们提供了一些配置切入点,我们可以通过配置 annotation,按照官方提供的一些规则来将我们的一些自定义配置插入进去。
  • 官方文档地址:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
  • 列出两种切入点示例:
    nginx.ingress.kubernetes.io/configuration-snippet (用于插入 location 块代码段)
    nginx.ingress.kubernetes.io/server-snippet (用于插入 server 块中的代码段)
  • 使用示例:
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |-
      add_header Shy-Test 888;
      more_set_headers 'Shy-Hello: hello' 'Demo: demo';
  labels:
    cattle.io/creator: norman
  name: website-muses-docs
  namespace: muses-docs
  • 如上示例就是在 nginx 的 server 块中添加两行代码。
    add_header Shy-Test 888; 就是给响应头添加一个header。
    more_set_headers ‘Shy-Test: 666’ ‘Demo: demo’; 也是给响应头设置多个 header,与 add_header 不同的是,这个会覆盖,add 是追加
  • 或者是如下这种:
nginx.ingress.kubernetes.io/configuration-snippet: |
  more_set_headers "Request-Id: $req_id";
  • 或者
nginx.ingress.kubernetes.io/configuration-snippet: |
  proxy_set_header My-Custom-Header $http_my_custom_header;

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rancher是一个开源的容器管理平台,支持Kubernetes集群的部署和管理。而IngressKubernetes的一种资源对象,用于管理分发入站流量到集群中的服务。 在Rancher中配置Ingress可以通过以下步骤完成: 1. 登录Rancher并选择所需的环境。 2. 在“项目”部分,创建或选择一个项目,在该项目下创建一个命名空间用于部署Ingress资源。 3. 在该命名空间下创建Ingress对象。可以在Rancher提供的图形化界面中创建,也可以通过YAML文件定义并导入。 4. 在Ingress对象中定义路由规则。可以设置路径和主机名等规则来将流量分发到不同的服务。 5. 为每个路由规则定义后端服务。可以选择Kubernetes服务、外部IP或者主机名来作为后端服务。 6. 配置Ingress Controller。Ingress Controller是Kubernetes集群中负责处理Ingress对象并实际转发流量的组件。在Rancher中,可以选择Nginx Ingress Controller或者Traefik等常用Ingress Controller进行配置和部署。 7. 部署Ingress Controller。可以通过Rancher提供的应用商店或者手动创建来部署Ingress Controller。 8. 验证配置。在部署完成后,可以通过访问指定的主机名或者路径来验证Ingress配置是否生效。 总而言之,通过Rancher可以方便地配置和管理Ingress对象,并通过选择合适的Ingress Controller来实现流量的负载均衡和路由分发。这样可以更好地管理和控制集群中的服务访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值