ingress 配置说明

 

pathType 类型

1. Exact - 精确匹配

  • 匹配规则:路径必须完全匹配,区分大小写

  • 使用场景:特定 API 端点、固定路径  

匹配示例:

  • ✅ /api/metrics - 完全匹配

  • ❌ /api/metrics/ - 不匹配(尾部斜杠)

  • ❌ /api/metrics/extra - 不匹配

  • ❌ /API/metrics - 不匹配(大小写不同)

2. Prefix - 前缀匹配

  • 匹配规则:匹配以指定路径开头的所有路径

  • 使用场景:路径分组、目录结构

匹配示例:

  • ✅ /api - 匹配

  • ✅ /api/ - 匹配

  • ✅ /api/v1 - 匹配

  • ✅ /api/v1/users - 匹配

  • ❌ /apiv2 - 不匹配(需要路径分隔符) 

3. ImplementationSpecific - 实现特定

  • 匹配规则:由 Ingress Controller 决定匹配方式,不通过注解启用正则不匹配时(nginx.ingress.kubernetes.io/use-regex: "true"),行为与 Prefix 完全相同。

  • 使用场景:需要特定 Ingress Controller 的高级功能,如正则表达式

 

aws的alb的inress模版

aws alb必须的注解只有三个:

  1. scheme - ALB 类型

  2. target-type - 目标类型

  3. listen-ports - 监听端口

alb.ingress.kubernetes.io/scheme: internet-facing  

  • ALB 有公有 IP 地址

  • 可以从互联网直接访问

  • 流量路径:互联网 → ALB → 你的服务

alb.ingress.kubernetes.io/target-type: ip

  • ALB 直接将流量转发到 Pod 的 IP 地址

  • 绕过 kube-proxy,性能更好

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

 

 

一、需求:testinfo.org域名下的所有子域名都转发到pgs-gateway的service。试了以下配置, - host: "*.testinfo.org" 不生效

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pgs-gateway-ingress
  # 注解(annotations)取决于你使用的Ingress Controller,这里以Nginx为例
  # annotations:
  #   kubernetes.io/ingress.class: "nginx" # 对于较老版本的nginx-ingress可能需要此注解
  #   cert-manager.io/cluster-issuer: "letsencrypt-prod" # 如果你使用cert-manager自动申请TLS证书
spec:
  rules:
  - host: "*.testinfo.org" # 通配符匹配所有子域名
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: pgs-gateway # 你的Service名称
            port:
              number: 80 # Service暴露的端口号,请根据实际情况修改
  # 可选 TLS 配置部分(如果需要HTTPS)
  # tls:
  # - hosts:
  #   - "*.testinfo.org"
  #   secretName: testinfo-wildcard-tls-secret # 存放通配符证书的Secret

 

二、需求:设置默认把所有请求都转发到sqs-gateway的service

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sqs-gateway-catch-all-ingress
  # annotations:
  #   kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  # 规则1:匹配任何主机名(Host header)
  - host: "" # 也可以省略整个host字段,效果类似
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: sqs-gateway
            port:
              number: 80

 

三、需求:为checkout.dev.test.com域名限制外网访问/api/metrics

1、利用 Nginx 的路径匹配优先级,为 /api/metrics 创建一个特定的路径规则:

  - host: checkout.dev.test.com
    http:
      paths:
      # 首先定义要阻止的路径 - 使用精确匹配
      - path: /api/metrics
        pathType: Exact
        backend:
          service:
            name: block-metrics-service  # 创建一个专门返回403的服务
            port:
              number: 80
      # 然后定义其他所有路径
      - path: /
        pathType: ImplementationSpecific
        backend:
          service:
            name: pgs-gateway
            port:
              number: 3000

2、创建一个专门用于返回403的Service:

# 创建返回403的Deployment和Service
apiVersion: apps/v1
kind: Deployment
metadata:
  name: block-metrics
  namespace: staging
spec:
  replicas: 1
  selector:
    matchLabels:
      app: block-metrics
  template:
    metadata:
      labels:
        app: block-metrics
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: nginx-config
        configMap:
          name: block-metrics-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: block-metrics-config
  namespace: staging
data:
  default.conf: |
    server {
        listen 80;
        location / {
            return 403 '{"error": "Forbidden", "message": "Metrics access not allowed on checkout service"}';
            add_header Content-Type application/json always;
        }
    }
---
apiVersion: v1
kind: Service
metadata:
  name: block-metrics-service
  namespace: staging
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: block-metrics

 

posted @ 2025-09-13 02:12  苦逼yw  阅读(11)  评论(0)    收藏  举报