【问题标题】:How to set up https on kubernetes bare metal using traefik ingress controller如何使用 traefik 入口控制器在 kubernetes 裸机上设置 https
【发布时间】:2019-07-06 08:34:06
【问题描述】:

我正在运行一个由三个节点组成的 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"

Traefik 入口控制器部署代码

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

traefik 仪表板的入口

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 运行的网页

【问题讨论】:

  • 我很好奇你为什么选择为 Traefik 只运行 1 个副本,而在 Nginx 配置中运行 3 个。我正在尝试追踪我们在为 Traefik 入口控制器运行超过 1 个副本时看到的间歇性超时问题。

标签: kubernetes kubeadm traefik-ingress


【解决方案1】:

实际上你有 3 种方法来配置 Traefik 使用 https 与后端 pod 通信:

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

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

还应将额外的身份验证annotations 添加到 Ingress 对象中,例如:

ingress.kubernetes.io/auth-tls-secret: secret

当然还有add a TLS Certificate to the Ingress

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2021-09-27
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多