当前位置: 首页 > 知识库问答 >
问题:

如何使用traefik入口控制器在kubernetes裸机上设置https

闾丘成双
2023-03-14

我正在运行一个kubernetes集群,它由三个节点组成,工作出色,但现在是时候让我的Web应用程序安全了,所以我部署了一个入口控制器(traefik)。但是我找不到在上面设置https的说明。我知道我必须做的大部分事情,比如设置“秘密”(带有证书的容器)等,但我想知道如何配置我的入口控制器和与之相关的所有文件,以便我能够使用安全连接

我已经配置了入口控制器,并创建了一些前端和后端。此外,我还配置了nginx服务器(实际上我正在运行的是一个web应用程序)以在443端口上工作

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 # tells deployment to run 3 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: ilchub/my-nginx
        ports:
        - containerPort: 443
      tolerations:
      - key: "primary"
        operator: Equal
        value: "true"
        effect: "NoSchedule"
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: secure
        - name: admin
          containerPort: 8080
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  rules:
  - host: cluster.aws.ctrlok.dev
    http:
      paths:
      - path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30036
      name: web
    - protocol: TCP
      port: 443
      nodePort: 30035
      name: secure
    - protocol: TCP
      port: 8080
      nodePort: 30034
      name: admin
  type: NodePort

我想做的是保护我已经在运行的应用程序。最终结果必须是在https上运行的网页

共有1个答案

蓝鸿哲
2023-03-14

实际上,您有3种方法可以配置Traefik以使用https与后端pod通信:

  1. 如果入口规范中定义的服务端口是443(请注意,您仍然可以使用Target etPort在您的pod上使用不同的端口)。
  2. 如果入口规范中定义的服务端口的名称以https开头(例如https-api、https-web或仅https)。
  3. 如果入口规范包含注释ingress.kubernetes.io/protocol:https。

如果存在这些配置选项中的任何一个,则假定后端通信协议为TLS,并将通过TLS自动连接。

此外,还应向入口对象添加其他身份验证注释,如:

ingress.kubernetes.io/auth-tls-secret代码

当然,向入口添加TLS证书

 类似资料:
  • 我正在云中的AWS EKS服务上运行我的工作负载。我可以看到没有默认的入口控制器可用(因为它可用于GKE),我们必须选择第三方。 我决定使用Traefik。在跟踪文档和其他资源(像这样)之后,我觉得使用Traefik作为IngresController不会自动在云中创建LoadBalancer。我们必须手动完成它来设置所有内容。 如何使用Traefik作为Kubernetes入口,就像其他入口控制

  • 操作系统:RHEL7|k8s版本:1.12/13|kubes祈祷|裸机 我部署了一个标准的kubespray裸机集群,我正在尝试了解部署nginx ingress controller的最简单推荐方法是什么,它将允许我部署简单的服务。没有提供负载平衡器。我希望我的主公共IP作为我的服务的endpoint。 Github k8s ingress nginx建议将节点端口服务作为“强制”步骤,这似乎不

  • 我不知道如何在Kubernetes集群(不是minikube)上设置入口控制器。我遵循的每一个nginx入口设置都产生了一个错误,控制器设置不正确。基本上,我想要一个与minikube插件等效的命令来启用入口。谢谢 编辑1- 我正在遵循中提到的安装步骤https://kubernetes.github.io/ingress-nginx/deploy/我已经尝试了baremetal、cloud和其他

  • 我一直在尝试使用Traefik作为Google云容器引擎的入口控制器。 我让我的超文本传输协议部署/服务启动并运行(当我用普通的负载均衡器公开它时,它回答得很好)。 然后我删除了LoadBalancer,并遵循本教程:https://docs.traefik.io/user-guide/kubernetes/ 因此,我得到了一个新的traefik入口控制器部署和服务,以及一个traefik ui入

  • 我在Hetzner Cloud上安装了一个带有“kubeadm”的库伯内特斯集群。 安装成功后,我安装了带有Helm的入口控制器。 入口控制器服务的EXTERNAL-IP处于挂起状态。默认类型是LoadBalancer,据我所知,只有AWS、Google等云提供商才支持这种类型。。。 所以我将服务类型更改为NodePort。 我应该如何将外部DNS配置到我的服务? 我不想附加3。。。。端口,但让入

  • 我正在AWS EKS上设置NGINX入口控制器。 我浏览了k8s入口资源,它非常有助于理解我们将LB端口映射到k8s服务端口,例如file Def。我安装了nginx控制器,直到必要的步骤。然后教程指示我创建一个入口资源。 我错过了什么?