首页 > 解决方案 > 我可以在 Ingress 配置中同时使用 http 和 https 吗?

问题描述

我有像下面这样的入口 yaml,它使入口代理 HTTPS 到 HTTP 连接。我很困惑如何进行同样的入口来处理 HTTP 到 HTTP 的连接。这意味着我希望它对传入的 HTTP 或 HTTPS 使用相同的规则。删除tls部分使其与 HTTP 一起使用,但添加它会停止 HTTP 并使其仅 HTTPS。是 Kubernetes 的限制阻止了同一入口控制器中的 HTTP 和 HTTPS 路由吗?

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  tls:
    - hosts:
        - "*.mydomain.com"
      secretName: aks-ingress-tls
  rules:
    - host: "*.mydomain.net"
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: frontend-service
                port:
                  number: 80

标签: kubernetesazure-aks

解决方案


您应该将 HTTP 请求重定向到您的 HTTPS 侦听器。访问 Azure LB 80/443 侦听器的请求将以相同的方式处理。

由于 Azure App 网关限制,您不能在入口规则中使用通配符主机,您必须使用解决方法。

请参阅:https ://azure.github.io/application-gateway-kubernetes-ingress/annotations/#ssl-redirect

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - "*.mydomain.com"
      secretName: aks-ingress-tls
  rules:
    - host: "www.mydomain.com"
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: frontend-service
                port:
                  number: 80

推荐阅读