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必须的注解只有三个:
-
scheme- ALB 类型 -
target-type- 目标类型 -
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

浙公网安备 33010602011771号