k8s-ingress-config

kubernets1年前 (2022)发布 megou
64 0

文章目录

一、ingress class

二、强制https

三、请求超时

四、跨域访问

五、限流

六、允许最大body

七、客户端白名单

八、默认服务

九、access log开关

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

参考文档 : https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

 

一、ingress class

如果一个k8s 集群里面部署多个ingress controller的时候,如果配置ingress 希望指定到某个ingress controller的时候,ingress claas就发挥巨大作用了。

一方面在controller启动的时候需要通过参数指定ingress class;

–ingress-class=ingress-other

1

另一方面,在创建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”;

1

2

或者

nginx.ingress.kubernetes.io/configuration-snippet: |

proxy_set_header My-Custom-Header $http_my_custom_header;

————————————————

版权声明:本文为CSDN博主「SRE运维充电站」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_41989934/article/details/125846213

© 版权声明

相关文章