k8s整合Traefik2入门(一)

k8s整合Traefik入门(一)

安装

首先下载helm,根据自己的k8s版本来选择相应的版本

[root@k8s-master1 ~]# tar -zvxf helm-v3.6.3-linux-amd64.tar.gz
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
[root@k8s-master1 ~]# ll
总用量 365408
-rw-------. 1 root root      1242 10月 14 2020 anaconda-ks.cfg
-rw-r--r--. 1 root root      1356 4月  13 14:08 ca-config.json
drwxr-xr-x  8 root root       146 2月  10 20:51 deployment-master
-rw-r--r--  1 root root     29809 4月  14 18:18 deployment-master.zip
-rw-r--r--  1 root root      1172 4月  14 18:54 deployment.yml
-rw-r--r--  1 root root  17408178 4月  13 15:01 etcd-v3.4.16-linux-amd64.tar.gz
-rw-r--r--  1 root root  13702117 4月  22 13:35 helm-v3.6.3-linux-amd64.tar.gz
-rw-r--r--  1 root root 343013036 4月  13 17:34 kubernetes-server-linux-amd64.tar.gz
drwxr-xr-x  2 3434 3434        50 7月  15 2021 linux-amd64
[root@k8s-master1 ~]# mv linux-amd64/helm /usr/local/bin/
[root@k8s-master1 ~]# helm version
version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}
[root@k8s-master1 ~]#

使用 Helm 来快速安装 traefik,首先获取 Helm Chart 包:

git clone https://github.com/traefik/traefik-helm-chart

[root@k8s-master1 ~]# cd traefik-helm-chart
[root@k8s-master1 traefik-helm-chart]# ll
总用量 44
-rw-r--r-- 1 root root   205 4月  22 13:36 artifacthub-repo.yml
-rw-r--r-- 1 root root   915 4月  22 13:36 CONTRIBUTING.md
-rw-r--r-- 1 root root   327 4月  22 13:40 dashboard.yaml
-rw-r--r-- 1 root root  1514 4月  22 13:38 deployment-prod.yaml
-rw-r--r-- 1 root root 11573 4月  22 13:36 LICENSE
drwxr-xr-x 2 root root    67 4月  22 13:36 lint
-rw-r--r-- 1 root root  3847 4月  22 13:36 Makefile
-rw-r--r-- 1 root root   473 4月  22 13:49 nginx-ir.yaml
-rw-r--r-- 1 root root  3231 4月  22 13:36 README.md
-rw-r--r-- 1 root root  2360 4月  22 13:36 TESTING.md
drwxr-xr-x 5 root root   157 4月  22 13:36 traefik
[root@k8s-master1 traefik-helm-chart]#

创建一个定制的 values 配置文件:

deployment:
  enabled: true
  kind: Deployment

使用 IngressClass. Traefik 版本

这里我们使用 hostport 模式将 Traefik 固定到 master1 节点上,因为只有这个节点有外网 IP,所以我们这里 master1 是作为流量的入口点。直接使用上面的 values 文件安装 traefik:

helm upgrade --install traefik ./traefik -f ./deployment-prod.yaml --namespace kube-system

[root@k8s-master1 traefik-helm-chart]# kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik
NAME                       READY   STATUS    RESTARTS   AGE
traefik-7586cd775d-8n58k   1/1     Running   0          3h2m
[root@k8s-master1 traefik-helm-chart]#

其中 entryPoints 属性定义了 webwebsecure 这两个入口点的,并开启 kubernetesingresskubernetescrd 这两个 provider,也就是我们可以使用 Kubernetes 原本的 Ingress 资源对象,也可以使用 Traefik 自己扩展的 IngressRoute 这样的 CRD 资源对象。

我们可以首先创建一个用于 Dashboard 访问的 IngressRoute 资源清单:

[root@k8s-master1 traefik-helm-chart]# cat dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard
  namespace: kube-system
spec:
  entryPoints:
  - web
  routes:
  - match: Host(wgr.traefik.com)  # 指定域名
    kind: Rule
    services:
    - name: api@internal
      kind: TraefikService  # 引用另外的 Traefik Service
[root@k8s-master1 traefik-helm-chart]#

配置hosts解析

k8s整合Traefik2入门(一)

进行访问

k8s整合Traefik2入门(一)

另外需要注意的是默认情况下 Traefik 的 IngressRoute 已经允许跨 namespace 进行通信了,可以通过设置参数 --providers.kubernetescrd.allowCrossNamespace=true 开启(默认已经开启),开启后 IngressRoute 就可以引用 IngressRoute 命名空间以外的其他命名空间中的任何资源了。

如果要让 Traefik 去处理默认的 Ingress 资源对象,则我们就需要使用名为 traefik的 IngressClass 了,因为没有指定默认的:

[root@k8s-master1 traefik-helm-chart]# kubectl get ingressclass
NAME      CONTROLLER                      PARAMETERS   AGE
traefik   traefik.io/ingress-controller          3h7m
[root@k8s-master1 traefik-helm-chart]#

创建如下所示的一个 Ingress 资源对象,这里的核心是 ingressClassName 要指向 traefik 这个 IngressClass:

[root@k8s-master1 traefik-helm-chart]# cat nginx-ir.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-nginx-by-traefik
  namespace: default
spec:
  ingressClassName: traefik  # 使用 traefk 的 IngressClass
  rules:
  - host: wgr.nginx.com  # 将域名映射到 my-nginx 服务
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:  # 将所有请求发送到 my-nginx 服务的 80 端口
            name: nginx-svc
            port:
              number: 80
[root@k8s-master1 traefik-helm-chart]#

测试:

k8s整合Traefik2入门(一)

ACME

Traefik 通过扩展 CRD 的方式来扩展 Ingress 的功能,除了默认的用 Secret 的方式可以支持应用的 HTTPS 之外,还支持自动生成 HTTPS 证书。

比如现在我们有一个如下所示的 whoami 应用:

apiVersion: v1
kind: Service
metadata:
  name: whoami
spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
  selector:
    app: whoami
[root@k8s-master1 whoami]# ll
总用量 16
-rw-r--r-- 1 root root 1107 4月  22 17:08 tls.crt
-rw-r--r-- 1 root root 1704 4月  22 17:08 tls.key
-rw-r--r-- 1 root root  259 4月  22 16:56 whoami-ir.yaml
-rw-r--r-- 1 root root  526 4月  22 16:51 whoami.yaml
[root@k8s-master1 whoami]# kubectl create secret tls who-tls --cert=tls.crt --key=tls.key
secret/who-tls created

这个时候我们就可以创建一个 HTTPS 访问应用的 IngressRoute 对象了:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: ingressroute-tls-demo
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(who.dalianpai.com) && PathPrefix(/tls)
    kind: Rule
    services:
    - name: whoami
      port: 80
  tls:
    secretName: who-tls

测试

k8s整合Traefik2入门(一)

本文参考:https://www.qikqiak.com/k3s/network/traefik/

Original: https://www.cnblogs.com/dalianpai/p/16179707.html
Author: 天宇轩-王
Title: k8s整合Traefik2入门(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551533/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一篇文章剖析设计模式中的简单工厂、工厂方法和抽象工厂

    前言 大部分的面试者在IT行业面试中,提及设计模式,可以列举一大堆,但是面试官要求细说的时候,往往部分基础不够牢固的同学只能提及简单工厂。今天我们来对面试过程中最常见的简单工厂、工…

    技术杂谈 2023年7月11日
    099
  • idea主类main左侧栏启动按钮消失原因

    我去找网上的方法发现都是去调正”项目结构”中的model设置,而我本地的model并没有问题,但是我还是删除model重加载,发现依然无效,经过我再三检测我…

    技术杂谈 2023年6月21日
    092
  • Inno Setup 卸载前关闭进程或服务 x86 x64

    1、32位程序的PSVince.dll插件方法。 [Setup] AppName=PSVince AppVerName=PSVince 1.0 DisableProgramGrou…

    技术杂谈 2023年5月31日
    088
  • 线性回归:波士顿房价(利用现成函数)

    Original: https://www.cnblogs.com/canxi-yue/p/16096168.htmlAuthor: 月月今天做题了吗Title: 线性回归:波士顿…

    技术杂谈 2023年7月11日
    067
  • SSH端口修改及限制IP登录及禁止ROOT远程登录方法

    1、修改SSH默认端口 这样SSH端口 22 和 888 将同时有效。 现在可使用SSH工具连接888端口,来测试是否成功。如果连接成功了,则再次编辑sshd_config的设置和…

    技术杂谈 2023年5月31日
    099
  • Aviator 内置函数

    系统函数 函数名称 sysdate() 返回当前日期对象 java.util.Date rand() 返回一个介于 [0, 1) 的随机数,结果为 double 类型 rand(n…

    技术杂谈 2023年5月31日
    084
  • windowscontainer(docker)容器资料笔记

    业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案。 技术背景: .net Docker 学习资料 Windows container…

    技术杂谈 2023年7月24日
    076
  • 《赵渝强》《Docker+Kubernetes容器实战派》新书上市!!!

    用一本书掌握Docker与Kubernetes核心内容!!!本书基于作者多年的教学与实践经验编写,分为上下两篇,共20章。 上篇(第1~11章)介绍Docoker,包含:Docke…

    技术杂谈 2023年7月24日
    071
  • 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量、数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应…

    技术杂谈 2023年7月11日
    0112
  • tarjan全家桶

    tarjan 全家桶 关于tarjan 它太强了 CCCOrz dfs树&low dfs树:在图上做不重复经过同一点的dfs,经过的边与点形成一棵树。于是图上所有点都被这棵…

    技术杂谈 2023年6月21日
    095
  • springcloud

    转载于狂神老师 ,本文仅作为笔记使用 回顾之前的知识~●JavaSE ●数据库●前端●Servlet ●Http ●Mybatis ●Spring ●SpringMVC ●Spri…

    技术杂谈 2023年7月11日
    062
  • LeetCode28.实现strStr()

    实现strStr()函数。 给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串出现的第一个位置(下标从0开始)。如果不存在,则返回-…

    技术杂谈 2023年7月24日
    067
  • 丈量你的代码,从cloc开始

    如果我想统计我当前的项目有多少代码量?行数最高的代码文件有哪些?并且排除某些目录,怎么统计?要统计出注释多少行,和代码多少行?使用cloc就行。 cloc是一款使用Perl语言开发…

    技术杂谈 2023年6月1日
    079
  • 用「闪电侠」的例子解释一下进程和线程

    1. 艾伦在一次粒子加速器爆炸大事故中获得了极速移动的超能力,因此开始化身为超级英雄”闪电侠”。类比之下,CPU是计算机最核心的部件,它负责指令的读取和执行…

    技术杂谈 2023年7月23日
    077
  • 剑指offer计划26(字符串中等)—java

    1.1、题目1 剑指 Offer 20. 表示数值的字符串 1.2、解法 这题表示直接上大佬的题解把。。。。代码太长了。有限状态自动机。对状态机一无所知的我一脸懵 1.3、代码 c…

    技术杂谈 2023年7月25日
    072
  • GO sync.WaitGroup

    执行完所有子函数后退出主程序 1. 串行执行 执行: 问题:性能慢 2. 并发执行 执行: 问题:主程序到底sleep多杀,还得自己控制,无法智能控制 3. 并发执行 执行: sy…

    技术杂谈 2023年5月31日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球