学习
实践
活动
专区
工具
TVP
写文章
专栏首页云原生拾遗Kubernetes 领进门 | 以 DaemonSet 模式部署 Traefik

Kubernetes 领进门 | 以 DaemonSet 模式部署 Traefik

如果是跨云/跨境/跨账号部署集群,在所有节点都运行Traefik实例,可以充分利用每个节点的外网IP,对特定流量进行分组,避免通过LB转发数据浪费带宽及流量。

# 证书邮箱
export MY_ACME_EMAIL=acme@example.org

# 创建命名空间
cat <<EOF | kubectl apply -f -
kind: Namespace
apiVersion: v1
metadata:
  name: traefik-system
---
kind: ServiceAccount
apiVersion: v1
metadata:
  name: traefik-ingress-controller
  namespace: traefik-system
EOF

# 创建 RBAC 授权
wget -qO- https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml | \
    sed 's/\(^metadata:\)/\1\n  namespace: traefik-system/g' | \
    sed 's/namespace: default/namespace: traefik-system/g' | \
    kubectl apply -f -

# 创建自定义资源
wget -qO- https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml | \
    sed 's/\(^metadata:\)/\1\n  namespace: traefik-system/g' | \
    sed 's/namespace: default/namespace: traefik-system/g' | \
    kubectl apply -f -

# 部署服务(使用主机网络)
cat <<EOF | kubectl apply -f -
kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: traefik-ingress-controller
  namespace: traefik-system
  labels:
    app: traefik
spec:
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      namespace: traefik-system
      labels:
        app: traefik
    spec:
      hostNetwork: true
      serviceAccountName: traefik-ingress-controller
      containers:
        - name: traefik
          image: traefik:v2.9
          args:
            - --api=true
            - --api.insecure=true
            - --api.dashboard=true
            - --entrypoints.web.address=:80
            - --entrypoints.websecure.Address=:443
            - --certificatesresolvers.default.acme.tlschallenge
            - --certificatesresolvers.default.acme.storage=/data/acme.json
            - --certificatesresolvers.default.acme.email=$MY_ACME_EMAIL
            - --providers.kubernetesingress
            - --providers.kubernetescrd
            - --log.level=ERROR
          volumeMounts:
            - name: data
              mountPath: /data
      volumes:
        - name: data
          hostPath:
            type: DirectoryOrCreate
            path: /var/lib/traefik
EOF

执行完上述命令,已经可以使用IP:8080来访问控制面板。不过,为了安全,我们还是应该使用防火墙禁用8080端口,并设置为通过自定义域名的方式访问控制面板。

# 访问域名
export MY_TRAEFIK_HOST=traefik.example.org

# 认证信息
export MY_AUTH_USERNAME=admin
export MY_AUTH_PASSWORD=PASSW0RD

# 生成密钥
export MY_SECRET_CODE=`echo $MY_AUTH_USERNAME:$(echo $MY_AUTH_PASSWORD | openssl passwd -stdin -apr1) | base64`

# 应用变更
cat <<EOF | kubectl apply -f -
kind: Secret
apiVersion: v1
metadata:
  name: basic-auth
  namespace: traefik-system
data:
  auth: $MY_SECRET_CODE
---
kind: Middleware
apiVersion: traefik.containo.us/v1alpha1
metadata:
  name: basic-auth
  namespace: traefik-system
spec:
  basicAuth:
    secret: basic-auth
---
apiVersion: v1
kind: Service
metadata:
  name: dashboard-service
  namespace: traefik-system
spec:
  ports:
    - name: dashboard
      port: 8080
  selector:
    app: traefik
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: dashboard-ingress
  namespace: traefik-system
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web
    traefik.ingress.kubernetes.io/router.middlewares: traefik-system-basic-auth@kubernetescrd
spec:
  rules:
    - host: $MY_TRAEFIK_HOST
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: dashboard-service
                port:
                  name: dashboard
EOF
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.rehiy.com复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Kubernetes 领进门 | traefik 自动签发证书及可视化面板

    Traefik 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。k3s 将其作为集群的默认反向代理 和 Ingress Contro...

    若海
  • traefik Ingress https配置

    简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apac...

    py3study
  • 【Kubernetes系列】第7篇 Ingress controller - nginx组件介绍

    在上一篇文章中我们介绍了如何通过helm进行安装部署traefik组件,文中还提到常用的ingress controller除了traefik还有Nginx、H...

    HankerCloud
  • K8S 实用工具之二 - 终端 UI K9S

    •第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?[1]》

    东风微鸣
  • k8s学习记录01

    最近在本机macOS安装了开发用的k8s集群之后,花了些时间研究k8s,在这个过程中有一些零零星星的实操技巧,在这里记录一下,这些实际操作技巧均是在之前搭建的单...

    jeremyxu
  • 一篇文章让你搞懂K8s Ingress,Traefik 2.0为例(上)

    了解K8s的同学应该都知道,如果想要把应用暴露到公网上供外部访问,那么不可避免的会接触到Ingress。本文以Traefik为例,让大家对Ingress和Tra...

    100000798482
  • # 一篇文章让你搞懂如何在K8s 里使用 Traefik 2.0作为Ingress Controller(上)

    了解K8s的同学应该都知道,如果想要把应用暴露到公网上供外部访问,那么不可避免的会接触到Ingress资源。本文以Traefik为例,让大家对Ingress和T...

    100000798482
  • Kubernetes 集群中ingress使用Traefik反向代理

    引用 Traefik 官网文档 中的一张图片,可以简要说明一下什么是 Traefik。

    菲宇
  • Kubernetes 集群部署 Ingress Traefik

    Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理。

    高楼Zee
  • 基于 Jaeger 进行微服务链路追踪

    基于解决不同行业、业务应用的可扩展性、可用性等一系列问题,由此而生的微服务架构得到了各大厂商的、组织以及个人的青睐,随之而来便广泛应用于各种行业场景应用中。然而...

    Luga Lee
  • 基于 Jaeger 进行微服务链路追踪

    其中,最为核心的问题莫过于微服务分布式性质导致的运行问题,以及带来的 2 个至关重要的挑战:

    Luga Lee
  • 一篇文章让你搞懂K8s Ingress,Traefik 2.0为例(上)

    了解K8s的同学应该都知道,如果想要把应用暴露到公网上供外部访问,那么不可避免的会接触到Ingress资源。本文以Traefik为例,让大家对Ingress和T...

    100000798482
  • 【Kubernetes系列】第6篇 Ingress controller - traefik组件介绍

    为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingress controller组件。也就是说如果在kubernet...

    HankerCloud
  • Kubernetes 1.20.5 安装traefik在腾讯云下的实践

    https://cloud.tencent.com/act/season?from=14065

    对你无可奈何
  • Kubernetes生态Ingress组件Traefik v2.0浅析

    上一篇文章简单介绍了下Kubernetes生态的几个组件,这篇文章重点讲解下其中的Traefik组件,Traefik组件类似与Nginx,可以为整个集群做服务暴...

    云爬虫技术研究笔记
  • k3s 启用 traefik 自动签发证书及可视化面板

    Traefik 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。k3s 将其作为集群的默认反向代理 和 Ingress Contro...

    若海
  • 构建另一种服务网格:使用SMI规范的新方法

    在这篇文章中,我将通过深入研究Maesh项目背后的技术细节,探究服务网格接口(Service Mesh Interface,SMI)规范的高级概念,是什么使该项...

    CNCF
  • Linkerd 2.10(Step by Step)—Ingress 流量

    从 Linkerd 2.9 版开始,有两种方式可以让 Linkerd 代理 与您的 Ingress Controller 一起运行。

    为少

扫码关注腾讯云开发者

领取腾讯云代金券