跳转至

Kubernetes 自定义 ingress规则


2020-06-21 by dongnan

开始之前

默认情况下我们使用的是 NGINX Ingress Controller 内置的选项,例如需要关闭日志:

annotations:
  nginx.ingress.kubernetes.io/enable-access-log: "false"

当内置选项无法满足需求时,Ingress控制器提供了添加自定义nginx参数配置的方式,接下来我们使用一个例子说明。

环境描述

测试的k8s集群由一个Master管理节点、两个Worker计算节点组成,详细请参考这里

举个栗子

设置 ingress 规则目标是,当访问域名A(a.xyc.com)重定向到域名B(b.xyc.com) 。

操作步骤

编辑 lb.yaml 配置文件。

这里注释掉之前的无效选项:

  annotations:
    # nginx.ingress.kubernetes.io/affinity: "cookie"
    #...省略

添加configuration-snippet选项:

  annotations:
    #...省略
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(.*)$ https://b.xyc.com$1 permanent;

修改后的lb.yaml配置文件:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: xhf-prd
  name: prd-xhf
  annotations:
    #...省略
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(.*)$ https://b.xyc.com$1 permanent;
spec:
  rules:
  - host: a.xyc.com
    http:
      paths:
      - path: /
        backend:
          serviceName: xhf-svc
          servicePort: 80

验证

使用curl命令模拟请求:

curl -IL https://a.xyc.com
HTTP/2 301 
#...省略
location: https://b.xyc.com/
set-cookie: SERVERID=22922744xxxx0a95ab6cd|1642496472|1642496472;Path=/

HTTP/2 200 
#...省略
set-cookie: SERVERID=814b1d14xxxxb305a1df8|1642496473|1642496473;Path=/

返回结果共请求了两次:

  • 1次服务器返回301状态码 a.xyc.com 被重定向新的地址 https://b.xyc.com/
  • 2次访问新的地址是 https://b.xyc.com/ 返回200状态码。

参考

回到页面顶部