Kubernetes 使用Traefik强制HTTPS
我在K8s集群中使用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
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