Ingress——2

目录

[‌一. 域名重定向(HTTP→HTTPS/旧域名跳转)‌](#‌一. 域名重定向(HTTP→HTTPS/旧域名跳转)‌)

[‌二. 前后端分离Rewrite(路径改写)‌](#‌二. 前后端分离Rewrite(路径改写)‌)

[‌三. 混合配置示例(重定向+Rewrite)‌](#‌三. 混合配置示例(重定向+Rewrite)‌)

[‌四. SSL/TLS配置(HTTPS加密)‌](#‌四. SSL/TLS配置(HTTPS加密)‌)

[‌五. 基本认证(Basic Auth)‌](#‌五. 基本认证(Basic Auth)‌)


‌一**. 域名重定向(HTTP→HTTPS/旧域名跳转)**‌

https-redirect.yaml

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: https-redirect
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: https://$host$request_uri
spec:
  rules:
  - host: old.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dummy-service
            port:
              number: 80

逐行解释‌:

  • nginx.ingress.kubernetes.io/permanent-redirect:Nginx特有注解,返回301永久重定向
  • $host$request_uri:保留原始请求的域名和路径
  • dummy-service:虚拟服务(实际不会处理请求)

‌二**. 前后端分离Rewrite(路径改写)**‌

rewrite-frontend.yaml

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-demo
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: backend-service
            port:
              number: 8080

逐行解释‌:

  • rewrite-target: /$2:将捕获的(.*)部分拼接到根路径
  • path: /api(/|$)(.*):正则匹配/api开头的路径,$2对应第二个捕获组
  • backend-service:8080:实际处理请求的后端服务

‌三**. 混合配置示例(重定向+Rewrite)**‌

combined-ingress.yaml

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: combined-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'deprecated.com') {
        return 301 https://new.example.com$request_uri;
      }
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: new.example.com
    http:
      paths:
      - path: /static/(.*)
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port:
              number: 80

关键点说明‌:

  • configuration-snippet:插入自定义Nginx代码片段实现复杂逻辑
  • 此配置同时完成旧域名跳转和静态资源路径改写

‌部署验证命令

复制代码
# 应用配置 
kubectl apply -f https-redirect.yaml 
kubectl apply -f rewrite-frontend.yaml 
# 检查注解是否生效 
kubectl describe ingress combined-ingress | grep Annotations 
# 测试重定向(返回301头) 
curl -I http://old.example.com 

注意事项‌:

  1. Rewrite规则需与后端服务路由规则匹配
  2. 生产环境建议使用cert-manager自动管理HTTPS证书
  3. 不同Ingress Controller(如Traefik)注解语法可能不同

‌四**. SSL/TLS配置(HTTPS加密)**‌

tls-secret.yaml

复制代码
apiVersion: v1
kind: Secret
metadata:
  name: example-tls
  namespace: default
type: kubernetes.io/tls
data:
  tls.crt: <base64编码的证书>
  tls.key: <base64编码的私钥>

证书需提前base64编码:cat cert.pem | base64 -w0

ssl-ingress.yaml

复制代码
Version: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: example-tls
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        backend:
          service:
            name: web-service
            port: 
              number: 80

关键参数说明:

  • ssl-redirect: "true" 强制HTTP跳转到HTTPS
  • tls块定义证书关联的域名和Secret

‌五**. 基本认证(Basic Auth)**‌

auth-secret.yaml

复制代码
apiVersion: v1
kind: Secret
metadata:
  name: basic-auth
  namespace: default
type: Opaque
data:
  auth: $(echo -n 'username:password' | openssl base64 -A)

生成命令:htpasswd -c auth foo 然后base64编码

auth-ingress.yaml

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: auth-ingress
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
  rules:
  - host: private.example.com
    http:
      paths:
      - path: /
        backend:
          service:
            name: private-service
            port:
              number: 8080

核心注解说明:

  • auth-type 指定认证方式为basic
  • auth-secret 关联存储凭据的Secret
  • auth-realm 浏览器弹出的认证提示文本

‌部署验证命令

复制代码
# 应用配置 
kubectl apply -f tls-secret.yaml 
kubectl apply -f ssl-ingress.yaml 
# 检查证书状态 
kubectl describe ingress secure-ingress | grep -A3 'TLS' 
# 测试认证(返回401未授权) 
curl -v http://private.example.com 

注意事项:

  1. 生产环境建议使用Let's Encrypt通过cert-manager自动签发证书
  2. Basic Auth需配合HTTPS使用避免密码泄露
  3. 不同Controller可能使用不同注解(如Traefik的auth注解前缀为traefik.ingress)
相关推荐
XUHUOJUN4 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack
Geek-Chow4 天前
Connecting kubectl to a Private EKS Cluster Over an Internal Domain
kubernetes·k8s·aws
spider_xcxc6 天前
Docker Compose 容器通信详解:同一个 Compose 文件才能互通吗?
docker·容器·k8s·容器化·容器网络
欢醉11 天前
k8s调用服务异常cannot allocate memory
kubernetes·k8s
万里侯14 天前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
spider_xcxc15 天前
云上网络基石(阿里云):深入解读阿里云VPC及其应用生态
网络·阿里云·云计算·k8s·运维开发·虚拟化
weixin_4399306416 天前
Kubernetes(K8s)入门实践
云原生·容器·kubernetes·k8s
AOwhisky18 天前
kubernetes(K8s)学习笔记:第十期与第十一期核心知识点自测与详解
运维·笔记·云原生·kubernetes·云计算·k8s·hpa
赵丙双19 天前
美团 Leaf-snowflake 分布式 ID 生成器 k8s 改造的想法
k8s·snowflake·分布式id生成器·美团 leaf
AOwhisky19 天前
Kubernetes(K8s)学习笔记(第十四期):集群存储与有状态应用(下篇):StatefulSet 有状态应用管理
redis·笔记·mysql·云原生·kubernetes·云计算·k8s