簡體   English   中英

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

[英]How to set up https on kubernetes bare metal using traefik ingress controller

我正在運行一個由三個節點組成的kubernetes集群,並且運行良好,但是現在是時候確保我的Web應用程序安全了,所以我部署了一個入口控制器(traefik)。 但是我找不到在其上設置https的說明。 我知道我將要做的大多數事情,例如設置“秘密”(帶有證書的容器)等,但是我想知道如何配置我的入口控制器和與其相關的所有文件,以便能夠使用安全連接

我已經配置了入口控制器並創建了一些前端和后端。 我還配置了nginx服務器(實際上是我正在運行的Web應用程序)以在443端口上工作


我的Web應用程序部署

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上運行的網頁

實際上,您可以通過3種方式將Traefik配置為使用https與后端Pod通信:

  1. 如果在入口規范中定義的服務端口是443(請注意,您仍然可以使用targetPort在Pod上使用其他端口)。
  2. 如果入口規范中定義的服務端口的名稱以https開頭(例如https-api,https-web或僅https)。
  3. 如果入口規范包含注釋ingress.kubernetes.io/protocol:https。

如果存在任何一個配置選項,則假定后端通信協議為TLS,並將自動通過TLS連接。

另外,還應將其他身份驗證注釋添加到Ingress對象,例如:

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

當然, 向入口添加TLS證書

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM