Kubernetes
一、基础知识
1. 概念和术语
2. Kubernetes特性
3. 集群组件
4. 抽象对象
5. 镜像加速下载
二、安装部署kubeadm
1. 基础环境准备
2. 安装runtime容器(Docker)
3. 安装runtime容器(Contained)
4. Containerd进阶使用
5. 部署kubernets集群
6. 部署calico网络组件
7. 部署NFS文件存储
8. 部署ingress-nginx代理
9. 部署helm包管理工具
10. 部署traefik代理
11. 部署dashboard管理面板(官方)
12. 部署kubesphere管理面板(推荐)
12. 部署metrics监控组件
13. 部署Prometheus监控
14. 部署elk日志收集
15. 部署Harbor私有镜像仓库
16. 部署minIO对象存储
17. 部署jenkins持续集成工具
三、kubectl命令
1. 命令格式
2.node操作常用命令
3. pod常用命令
4.控制器常用命令
5.service常用命令
6.存储常用命令
7.日常命令总结
8. kubectl常用命令
四、资源对象
1. K8S中的资源对象
2. yuml文件
3. Kuberbetes YAML 字段大全
4. 管理Namespace资源
5. 标签与标签选择器
6. Pod资源对象
7. Pod生命周期与探针
8. 资源需求与限制
9. Pod服务质量(优先级)
五、资源控制器
1. Pod控制器
2. ReplicaSet控制器
3. Deployment控制器
4. DaemonSet控制器
5. Job控制器
6. CronJob控制器
7. StatefulSet控制器
8. PDB中断预算
六、Service和Ingress
1. Service资源介绍
2. 服务发现
3. Service(ClusterIP)
4. Service(NodePort)
5. Service(LoadBalancer)
6. Service(ExternalName)
7. 自定义Endpoints
8. HeadlessService
9. Ingress资源
10. nginx-Ingress案例
七、Traefik
1. 知识点梳理
2. 简介
3. 部署与配置
4. 路由(IngressRoute)
5. 中间件(Middleware)
6. 服务(TraefikService)
7. 插件
8. traefikhub
9. 配置发现(Consul)
10. 配置发现(Etcd)
八、存储
1. 配置集合ConfigMap
6. downwardAPI存储卷
3. 临时存储emptyDir
2. 敏感信息Secret
5. 持久存储卷
4. 节点存储hostPath
7. 本地持久化存储localpv
九、rook
1. rook简介
2. ceph
3. rook部署
4. rbd块存储服务
5. cephfs共享文件存储
6. RGW对象存储服务
7. 维护rook存储
十、网络
1. 网络概述
2. 网络类型
3. flannel网络插件
4. 网络策略
5. 网络与策略实例
十一、安全
1. 安全上下文
2. 访问控制
3. 认证
4. 鉴权
5. 准入控制
6. 示例
十二、pod调度
1. 调度器概述
2. label标签调度
3. node亲和调度
4. pod亲和调度
5. 污点和容忍度
6. 固定节点调度
十三、系统扩展
1. 自定义资源类型(CRD)
2. 自定义控制器
十四、资源指标与HPA
1. 资源监控及资源指标
2. 监控组件安装
3. 资源指标及其应用
4. 自动弹性缩放
十五、helm
1. helm基础
2. helm安装
3. helm常用命令
4. HelmCharts
5. 自定义Charts
6. helm导出yaml文件
十六、k8s高可用部署
1. kubeadm高可用部署
2. 离线二进制部署k8s
3. 其他高可用部署方式
十七、日常维护
1. 修改节点pod个数上限
2. 集群证书过期更换
3. 更改证书有效期
4. k8s版本升级
5. 添加work节点
6. master节点启用pod调度
7. 集群以外节点控制k8s集群
8. 删除本地集群
9. 日常错误排查
10. 节点维护状态
11. kustomize多环境管理
12. ETCD节点故障修复
13. 集群hosts记录
14. 利用Velero对K8S集群备份还原与迁移
15. 解决K8s Namespace无法正常删除的问题
16. 删除含指定名称的所有资源
十八、k8s考题
1. 准备工作
2. 故障排除
3. 工作负载和调度
4. 服务和网络
5. 存储
6. 集群架构、安装和配置
本文档使用 MrDoc 发布
-
+
首页
8. traefikhub
## 简介 ### 什么是traefik hub 在traefik2.7后,推出了Traefik Hub云原生网络平台,可帮助你即时在边缘发布、保护和扩展容器。它提供了从用户到容器的端到端连接以及进入每个服务的网关。它是用于在分布式系统中连接多个集群的统一解决方案,它通过一个简单易用的仪表板整合了网络堆栈的多个层。Traefik Hub 是一种开箱即用的解决方案,易于学习,甚至更易于实施,开发团队只需单击一下即可将应用程序发布到 Internet,并自动配置重要的安全实践。<br />Traefik Hub 将完全托管于你的基础架构之上,并与你安装在每个集群中的代理进行连接。代理附加到入口实例。它们充当你的每项服务的网关,该平台向每个代理发送指令并从其接收关键指标。Traefik Hub 适用于 Kubernetes 或 Docker 集群。<br />官方文档:[https://doc.traefik.io/traefik/traefik-hub/](https://doc.traefik.io/traefik/traefik-hub/)<br />traefik hub操作参考文档:[https://traefik.io/blog/publish-and-secure-applications-with-traefik-hub/](https://traefik.io/blog/publish-and-secure-applications-with-traefik-hub/) ### traefik hub特性 **一键服务发布**<br />Traefik Hub 使发布和暴露任何应用程序到互联网变得容易。对于每个发布的服务,Traefik Hub 提供了一个唯一的 DNS 名称,可以立即用于从互联网的任何地方访问该容器。<br />**加密隧道**<br />Traefik Hub 通过一个私有的、加密的隧道连接到你的集群。利用该隧道,你可以发布你的容器供外部访问,而不必担心复杂和不安全的公共 IP 或 NAT 配置。<br /><br />**自动化证书管理**<br />Traefik Hub 将请求、更新和传播 ACME 证书到你所有的集群,以便所有服务保持一致的安全配置。<br /><br />**灵活地访问控制**<br />无论你使用哪种容器编排工具,都能保护和保障对你的服务的访问。Traefik Hub 支持 JSON 网络令牌(JWT)、Basic Auth.<br /><br />**集中化多集群管理仪表板**<br />在一个单一的窗口内,轻松地可视化所有关于你的所有集群、它们的配置以及服务性能和健康的入站流量的信息。<br /> ### traefik hub工作原理 <br />首先在你自己的 Kubernetes 或 Docker 集群中,部署2 个 Traefik Hub 相关组件: - Traefik - Traefik Hub Agent(Hub Agent Auth Server+Hub Agent Controller+Hub Agent Tunnel) 当你对外发布服务的时候,Traefik Hub 会给你的服务分配一个唯一的域名 (DNS),你需要访问该域名的 HTTPS 协议,然后 Traefik Hub 接收到请求,将请求通过 Traefik Hub 与你自己的 Traefik Hub Agent 之间建立的安全隧道,将请求转发给 Traefik Hub Agent,Traefik Hub Agent 再将请求转发给 Traefik,最后流转到具体的服务。 ### 温馨提示 目前 Traefik Hub SaaS 服务是实验阶段,并不建议上生产使用,实测发现认证服务配置后会并不会自动弹出认证页面。目前免费用户创建服务上限为10个,后续随时可能收费。 ## 安装traefik hub ### 创建账户 点击traefik dashboard右侧的`Go to Hub Dashboard`跳转到traefik hub登录页<br /><br />注册账号后登录traefik hub<br /><br />注册后traefik会自动为你的账号分配域名,安装traefik hub agent后,会自动创建通配符域名证书资源。 ### 安装agent 接下来点击agent页面,选择安装traefik hub agent<br /><br />接下来按照提示,安装traefik proxy和traefik hub agent<br /><br />执行完成后查看资源信息 ```bash [root@k8s-master ~]# helm list -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION hub-agent hub-agent 1 2022-10-08 22:51:39.810530479 +0800 CST deployed hub-agent-0.24.0 v0.5.0 traefik hub-agent 1 2022-10-08 22:47:51.683322496 +0800 CST deployed traefik-12.0.2 2.9.1 [root@k8s-master ~]# kubectl get pod -n hub-agent NAME READY STATUS RESTARTS AGE hub-agent-auth-server-7cc987c674-df4z4 1/1 Running 0 48s hub-agent-auth-server-7cc987c674-lf9cj 1/1 Running 0 48s hub-agent-auth-server-7cc987c674-m85tt 1/1 Running 0 48s hub-agent-controller-8586f98687-nwhr5 1/1 Running 0 48s hub-agent-tunnel-75c6f88b55-g6jbd 1/1 Running 0 48s traefik-hub-64dff85f87-7r52j 1/1 Running 0 4m47s [root@k8s-master ~]# kubectl get svc -n hub-agent NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hub-agent-auth-server ClusterIP 10.101.16.85 <none> 80/TCP 108s hub-agent-controller ClusterIP 10.104.3.221 <none> 443/TCP 109s hub-catch-all ExternalName <none> hub.traefik.io 443/TCP 109s traefik-hub ClusterIP 10.111.28.192 <none> 9100/TCP,9901/TCP 5m37s ``` 接下来查看traefik hub的agent详细信息<br /> ## 发布服务 在本地的kubernetes集群有一个myapp1服务,并且创建了service资源(不需要创建ingressrouter资源),此时访问myapp1只能通过本地svc访问,因为没有公网IP和域名,其他互联网用户无法访问。 ```bash [root@k8s-master ingress]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14d myapp1 ClusterIP 10.104.58.5 <none> 80/TCP 11h myapp2 ClusterIP 10.99.197.6 <none> 80/TCP 11h traefik NodePort 10.104.36.193 <none> 80:32248/TCP,443:30732/TCP,9000:30517/TCP,9100:31763/TCP,9200:32614/TCP,9300:32084/UDP 45m [root@k8s-master ingress]# kubectl get pod NAME READY STATUS RESTARTS AGE myapp1-795d947b45-lvfmb 1/1 Running 2 11h myapp2-6ffd54f76-b2thm 1/1 Running 2 11h myapp2-6ffd54f76-stvf8 1/1 Running 0 115s test 1/1 Running 5 8d traefik-ingress-controller-5d474997df-qnm4l 1/1 Running 0 23m ``` 接下来使用traefik hub发布myapp1服务。<br /><br /><br /><br />应用发布成功时,traefik会为我们自动配置域名并设置ssl证书,接下来访问公网域名即可。访问测试[https://valid-hookworm-xmat3h.qitgjjol.traefikhub.io/](https://valid-hookworm-xmat3h.qitgjjol.traefikhub.io/)<br /> ## 发布带访问控制策略的服务 先在访问控制策略页面,点击创建访问控制策略<br /><br />选择基本身份验证服务,并设置账号密码<br /><br />定义ACP后,我们可以在访问控制策略中看到详细信息<br /><br />接下来发布一个flask应用,在ACP选项中选择basic auth认证<br /><br />等待应用发布成功,访问公网域名<br /><br />实际访问测试并没有出现认证策略,期待官方修复。<br /> ## 发布非k8s服务 除了docker k8s服务的直接暴露外,如果有内网服务与k8s互通的话,也可以通过Kubernetes Service + Endpoint 的方式将非 Kubernetes 服务配置为 Kubernetes 服务,通过traefik hub发布服务。<br />Kubernetes Service + Endpoint的详细用法参考文章:[https://www.cuiliangblog.cn/detail/section/94200051](https://www.cuiliangblog.cn/detail/section/94200051)<br />例如我在k8s集群外的机器部署了青龙面板,由于没有公网IP,只能内网访问。但是运行青龙面板的机器和k8s机器可以互通,此时就可以通过traefik hub发布服务<br /><br />创建青龙服务的service和endpoints ```yaml [root@tiaoban ingress]# cat qinglong-svc.yaml apiVersion: v1 kind: Service metadata: name: qinglong spec: ports: - port: 5700 name: qinglong targetPort: 5700 --- apiVersion: v1 kind: Endpoints metadata: name: qinglong subsets: - addresses: - ip: 192.168.10.100 # 外部机器IP ports: - port: 5700 # 服务端口 name: qinglong [root@tiaoban ingress]# kubectl apply -f qinglong-svc.yaml service/qinglong created endpoints/qinglong created [root@tiaoban ingress]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE flask ClusterIP 10.104.29.157 <none> 5000/TCP 53m myapp1 ClusterIP 10.105.147.187 <none> 80/TCP 13h qinglong ClusterIP 10.102.161.1 <none> 5700/TCP 6s ``` 接下来查看traefik hub控制台,已自动发现qinglong服务。<br /><br />配置qinglong服务发布<br /><br />提示qinglong服务发布成功<br /><br />通过公网域名访问服务<br />
Nathan
2024年6月22日 12:47
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文件
Docx文件
分享
链接
类型
密码
更新密码