Kubernetes 使用Traefik强制HTTPS

Kubernetes 使用Traefik强制HTTPS,kubernetes,devops,traefik,Kubernetes,Devops,Traefik,我在K8s集群中使用traefik作为入口控制器。我想通过HTTPS强制执行所有流量 文档有点混乱,因为显然有不同的方法来做相同的事情?也就是说,我想知道这两个之间的区别是什么: 如果我使用K8s就足以使用常规注释,或者我仍然必须编辑TOML文件 我尝试使用traefik.ingres.kubernetes.io/redirect-entry-point:https,但找不到该服务,因此我猜我的配置中缺少一些内容 如果我删除了上面的一行,那么一切都可以正常工作,但是HTTP->HTTPS

我在K8s集群中使用traefik作为入口控制器。我想通过HTTPS强制执行所有流量

文档有点混乱,因为显然有不同的方法来做相同的事情?也就是说,我想知道这两个之间的区别是什么:

如果我使用K8s就足以使用常规注释,或者我仍然必须编辑TOML文件

我尝试使用
traefik.ingres.kubernetes.io/redirect-entry-point:https
,但找不到该服务,因此我猜我的配置中缺少一些内容

如果我删除了上面的一行,那么一切都可以正常工作,但是HTTP->HTTPS当然不能正常工作。当我把线放回原位时,它返回404

FWIW,入口定义如下(traefik重定向至404):

我用nginx尝试了同样的配置,并更改为各自的元数据,效果很好!。以下是用于nginx和入口的元数据:

nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
为了完整起见,我复制粘贴了nginx和traefik的服务定义。第一个按预期工作:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: http
  type: LoadBalancer
</code>
<code>
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: ingress-prod
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - name: http
      port: 80
      targetPort: http
      protocol: TCP
    - name: https
      port: 443
      targetPort: http
      protocol: TCP
  type: LoadBalancer

第一个是toml
Traefik
配置文件,可以通过ConfigMap在Kubernetes中修改,也可以在Traefik容器本身中修改,也可以在Traefik容器命令行中修改(取决于部署Traefik入口控制器的方式)

第二个主要用于通过Kubernetes资源管理Traefik入口控制器中的配置

您没有发布入口定义,但很可能它没有处理HTTPS的方法,这就是为什么添加注释时,它会将流量发送到端口
443
,而Traefik会返回
404


要处理HTTPS/TLS,您需要(创建K8s证书密钥、在入口中配置TLS等)。或者关于如何使用ConfigMap启用它。

第一个是toml
Traefik
配置文件,可以通过ConfigMap在Kubernetes中修改,也可以在Traefik容器本身中修改,或者在Traefik容器命令行中修改(取决于您部署Traefik入口控制器的方式)

第二个主要用于通过Kubernetes资源管理Traefik入口控制器中的配置

您没有发布入口定义,但很可能它没有处理HTTPS的方法,这就是为什么添加注释时,它会将流量发送到端口
443
,而Traefik会返回
404


要处理HTTPS/TLS,您需要(创建K8s证书密钥、在入口中配置TLS等)。或者关于如何使用ConfigMap启用它。

我给您的解决方案是有效的,因为您为原始问题提供了正确的答案,尽管原始问题的表述很糟糕,但我的回答很糟糕。 我发现了一个相关的问题,它回答了我的问题,并且非常有效:


例如,Fruefik告诉我,使用nginx只需使用元数据注释就可以强制重定向到ssl,而使用traefik则必须编辑TOML文件(或者至少我没有找到解决此问题的等效注释).

我给你的解决方案是有效的,因为你对原始问题给出了正确的答案。虽然原始问题的表述很糟糕,但我的回答很糟糕。 我发现了一个相关的问题,它回答了我的问题,并且非常有效:


例如,Fruefik告诉我,使用nginx只需使用元数据注释就可以强制重定向到ssl,而使用traefik则必须编辑TOML文件(或者至少我没有找到解决此问题的等效注释)。

谢谢!我看到了这个链接,但问题是我使用了ARN,即AWS在负载平衡器中自动生成的证书,因此负载平衡器本身处理SSL证书。在这种情况下,配置是什么?这就是梅艳芳编辑后意识到的问题,原来的问题应该是这样的。在traefik中强制http->https的元数据等价物是什么。nginx中有以下内容:nginx.ingres.kubernetes.io/force-ssl-redirect:“true”谢谢!我看到了这个链接,但问题是我使用了ARN,即AWS在负载平衡器中自动生成的证书,因此负载平衡器本身处理SSL证书。在这种情况下,配置是什么?这就是梅艳芳编辑后意识到的问题,原来的问题应该是这样的。在traefik中强制http->https的元数据等价物是什么。nginx中有以下内容:nginx.ingres.kubernetes.io/force-ssl-redirect:“true”没问题。这个问题是关于Traefik的,如果你有关于nginx和AWS的问题,我想最好用另一个Stackoverflow问题来提问。没问题。这个问题是关于Traefik的,如果你有关于nginx和AWS的问题,我认为最好用另一个Stackoverflow问题来提问。
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: http
  type: LoadBalancer
</code>
<code>
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: ingress-prod
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - name: http
      port: 80
      targetPort: http
      protocol: TCP
    - name: https
      port: 443
      targetPort: http
      protocol: TCP
  type: LoadBalancer