首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用traefik入口控制器在kubernetes裸金属上设置https

如何利用traefik入口控制器在kubernetes裸金属上设置https
EN

Stack Overflow用户
提问于 2019-07-06 08:34:06
回答 1查看 1.4K关注 0票数 0

我正在运行一个由三个节点组成的kubernetes集群,但是是时候让我的web应用程序变得安全了,所以我部署了一个入口控制器(Traefik)。但是我找不到在上面设置https的说明。我知道我需要做的大多数事情,比如设置一个“秘密”(带有证书的容器)等等,但是我想知道如何配置我的入口控制器和所有与它相关的文件,这样我就可以使用安全连接了。

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

我的web应用程序部署

代码语言:javascript
复制
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入口控制器部署代码

代码语言:javascript
复制
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仪表板入口

代码语言:javascript
复制
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

外部公开相关配置

代码语言:javascript
复制
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上的网页。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 11:40:35

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

  1. 如果入口规范中定义的服务端口为443 (请注意,您仍然可以使用targetPort在您的吊舱上使用不同的端口)。
  2. 如果在入口规范中定义的服务端口有一个以https开头的名称(例如https-api、https-web或仅仅https)。
  3. 如果入口规范包括注释inress.kubernetes.io/protocol: https。

如果这些配置选项之一存在,那么后端通信协议将被假定为TLS,并将通过TLS自动连接。

另外,还应该将额外的身份验证注解添加到宏对象中,如下所示:

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

当然,将TLS证书添加到入口处

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56912473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档