Ingress Nginx 常用规则使用

前提

本文使用 Ingress Nginx Version 0.24.1

本文所讲的配置规则,都配置在 annotations(局部配置) 中,Ingress Nginx Deployment 必须配置 --annotations-prefix 参数,默认以 nginx.ingress.kubernetes.io 开头。

Ingress Nginx Deployment 示例:

containers:
  - name: nginx-ingress-controller
    image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1
    args:
      - /nginx-ingress-controller
      - --configmap=$(POD_NAMESPACE)/nginx-configuration
      - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
      - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
      - --publish-service=$(POD_NAMESPACE)/ingress-nginx
      - --annotations-prefix=nginx.ingress.kubernetes.io
      - --ingress-class=nginx # 指定ingress-class 属性

--ingress-class:声明ingress入口名称,如果要绑定这个ingress,需要在 annotation 中定义 kubernetes.io/ingress.class: "nginx"

开启 TLS

创建ssl证书 secret

$ kubectl create secret tls www-example-com --key tls.key --cert tls.crt -n default

nginx.ingress.kubernetes.io/ssl-redirect 默认为 true,启用 TLS 时,http请求会 308 重定向到https

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/ssl-redirect: "false" # 关闭SSL跳转
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: demo-svc
          servicePort: 8080
  tls:
  - secretName: www-example-com
    hosts:
    - www.example.com

配置白名单IP范围

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/24,172.10.0.1
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: demo-svc
          servicePort: 8080

支持socket.io配置

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
    nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x_forwarded_for" # 以客户端IP哈希
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: demo-svc
          servicePort: 8080

rewrite 配置

下面 rewrite 规则意思是 访问 www.example.com/hello/(.*) 跳转到 www.example.com/(.*)

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: "/$1"
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /hello/(.*)$
        backend:
          serviceName: demo-svc
          servicePort: 8080

或者

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/hello/(.*)$ /$1 redirect;
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /hello/(.*)$
        backend:
          serviceName: demo-svc
          servicePort: 8080

限速

设置 www.example.com/login 登陆页为每秒100个连接数,10.0.0.0/24,172.10.0.1 IP段不在限速范围

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" # 绑定ingress-class
    nginx.ingress.kubernetes.io/limit-rps: '100'
    nginx.ingress.kubernetes.io/limit-whitelist: 10.0.0.0/24,172.10.0.1
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /login
        backend:
          serviceName: demo-svc
          servicePort: 8080

参考链接

  • https://github.com/kubernetes/ingress-nginx/blob/nginx-0.24.1/docs/user-guide/nginx-configuration/annotations.md

往期精彩文章

您的关注是小站的动力

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

扫码『加群』交流技术

Rancher是一个开源的容器管理平台,支持Kubernetes集群的部署和管理。而Ingress是Kubernetes的一种资源对象,用于管理分发入站流量到集群中的服务。 在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、付费专栏及课程。

余额充值