当前位置: 首页 > news >正文

电商网站建设综述济南建设厅网站

电商网站建设综述,济南建设厅网站,推广的方式,绿色环保材料网站模板下载作者 | Addo Zhang来源 | 云原生指北TL#xff1b;DR网络方面的知识又多又杂#xff0c;很多又是系统内核的部分。原本自己不是做网络方面的#xff0c;系统内核知识也薄弱。但恰恰是这些陌生的内容满满的诱惑#xff0c;加上现在的工作跟网络关联更多了#xff0c;逮住机… 作者 | Addo Zhang来源 | 云原生指北TLDR网络方面的知识又多又杂很多又是系统内核的部分。原本自己不是做网络方面的系统内核知识也薄弱。但恰恰是这些陌生的内容满满的诱惑加上现在的工作跟网络关联更多了逮住机会就学习下。这篇以 Kubernetes LoadBalancer 为起点使用 MetalLB 去实现集群的负载均衡器在探究其工作原理的同时了解一些网络的知识。由于 MetalLB 的内容有点多一步步来今天这篇仅介绍其中简单又容易理解的部分。LoadBalancer 类型 Service由于 Kubernets 中 Pod 的 IP 地址不固定重启后 IP 会发生变化无法作为通信的地址。Kubernets 提供了 Service 来解决这个问题对外暴露。Kubernetes 为一组 Pod 提供相同的 DNS 名和虚拟 IP同时还提供了负载均衡的能力。这里 Pod 的分组通过给 Pod 打标签Label 来完成定义 Service 时会声明标签选择器selector将 Service 与 这组 Pod 关联起来。根据使用场景的不同Service 又分为 4 种类型ClusterIP、NodePort、LoadBalancer 和 ExternalName默认是 ClusterIP。这里不一一详细介绍有兴趣的查看 Service 官方文档[1]。除了今天的主角 LoadBalancer 外其他 3 种都是比较常用的类型。LoadBalancer 官方的解释是使用云提供商的负载均衡器向外部暴露服务。外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。lb-service看到“云提供商提供”几个字时往往望而却步有时又需要 LoadBalancer 对外暴露服务做些验证工作虽然除了 7 层的 Ingress 以外还可以使用 NodePort 类型的 Service而 Kubernetes 官方并没有提供实现。比如下面要介绍的 MetalLB[2] 就是个不错的选择。MetalLB 介绍MetalLB 是裸机 Kubernetes 集群的负载均衡器实现使用标准路由协议。注意 MetalLB 目前还是 beta 阶段。前文提到 Kubernetes 官方并没有提供 LoadBalancer 的实现。各家云厂商有提供实现但假如不是运行在这些云环境上创建的 LoadBalancer Service 会一直处于 Pending 状态见下文 Demo 部分。MetalLB 提供了两个功能地址分配当创建 LoadBalancer Service 时MetalLB 会为其分配 IP 地址。这个 IP 地址是从预先配置的 IP 地址库获取的。同样当 Service 删除后已分配的 IP 地址会重新回到地址库。对外广播分配了 IP 地址之后需要让集群外的网络知道这个地址的存在。MetalLB 使用了标准路由协议实现ARP、NDP 或者 BGP。广播的方式有两种第一种是 Layer 2 模式使用 ARPipv4/NDPipv6 协议第二种是 BPG。今天主要介绍简单的 Layer 2 模式顾名思义是 OSI 二层的实现。具体实现原理看完 Demo 再做分析等不及的同学请直接跳到最后。运行时MetalLB 运行时有两种工作负载ControlerDeployment用于监听 Service 的变更分配/回收 IP 地址。SpeakerDaemonSet对外广播 Service 的 IP 地址。Demo安装之前介绍下网络环境Kubernetes 使用 K8s 安装在 Proxmox 的虚拟机[3]上。安装 K3s安装 K3s这里需要通过 --disable servicelb 禁用 k3s 默认的 servicelb。参考 K3s 文档[4]默认情况下 K3s 使用 Traefik[5] ingress 控制器 和 Klipper[6] Service 负载均衡器来对外暴露服务。curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable servicelb --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config创建工作负载使用 nginx 镜像创建两个工作负载kubectl create deploy nginx --image nginx:latest --port 80 -n default kubectl create deploy nginx2 --image nginx:latest --port 80 -n default同时为两个 Deployment 创建 Service这里类型选择 LoadBalancerkubectl expose deployment nginx --name nginx-lb --port 8080 --target-port 80 --type LoadBalancer -n default kubectl expose deployment nginx2 --name nginx2-lb --port 8080 --target-port 80 --type LoadBalancer -n default检查 Service 发现状态都是 Pending 的这是因为安装 K3s 的时候我们禁用了 LoadBalancer 的实现kubectl get svc -n default NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE kubernetes   ClusterIP      10.43.0.1       none        443/TCP          14m nginx-lb     LoadBalancer   10.43.108.233   pending     8080:31655/TCP   35s nginx2-lb    LoadBalancer   10.43.26.30     pending     8080:31274/TCP   16s这时就需要 MetalLB 登场了。安装 MetalLB使用官方提供 manifest 来安装目前最新的版本是 0.12.1。此外还可以其他安装方式供选择比如 Helm[7]、Kustomize[8] 或者 MetalLB Operator[9]。kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yamlkubectl get po -n metallb-system NAME                          READY   STATUS    RESTARTS   AGE speaker-98t5t                 1/1     Running   0          22s controller-66445f859d-gt9tn   1/1     Running   0          22s此时再检查 LoadBalancer Service 的状态仍然是 Pending 的嗯因为MetalLB 要为 Service 分配 IP 地址但 IP 地址不是凭空来的而是需要预先提供一个地址库。这里我们使用 Layer 2 模式通过 Configmap 为其提供一个 IP 段apiVersion: v1 kind: ConfigMap metadata:namespace: metallb-systemname: config data:config: |address-pools:- name: defaultprotocol: layer2addresses:- 192.168.1.30-192.168.1.49此时再查看 Service 的状态可以看到 MetalLB 为两个 Service 分配了 IP 地址 192.168.1.30、192.168.1.31kubectl get svc -n default NAME         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE kubernetes   ClusterIP      10.43.0.1       none         443/TCP          28m nginx-lb     LoadBalancer   10.43.201.249   192.168.1.30   8080:30089/TCP   14m nginx2-lb    LoadBalancer   10.43.152.236   192.168.1.31   8080:31878/TCP   14m可以请求测试下curl -I 192.168.1.30:8080 HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Wed, 02 Mar 2022 15:31:15 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Tue, 25 Jan 2022 15:03:52 GMT Connection: keep-alive ETag: 61f01158-267 Accept-Ranges: bytescurl -I 192.168.1.31:8080 HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Wed, 02 Mar 2022 15:31:18 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Tue, 25 Jan 2022 15:03:52 GMT Connection: keep-alive ETag: 61f01158-267 Accept-Ranges: bytesmacOS 本地使用 arp -a 查看 ARP 表可以找到这两个 IP 及 mac 地址可以看出两个 IP 都绑定在同一个网卡上此外还有虚拟机的 IP 地址。也就是说 3 个 IP 绑定在该虚拟机的 en0 上而去虚拟机节点查看网卡这里只能看到系统绑定的 IPLayer 2 工作原理Layer 2 中的 Speaker 工作负载是 DeamonSet 类型在每台节点上都调度一个 Pod。首先几个 Pod 会先进行选举选举出 Leader。Leader 获取所有 LoadBalancer 类型的 Service将已分配的 IP 地址绑定到当前主机到网卡上。也就是说所有 LoadBalancer 类型的 Service 的 IP 同一时间都是绑定在同一台节点的网卡上。当外部主机有请求要发往集群内的某个 Service需要先确定目标主机网卡的 mac 地址至于为什么参考维基百科[10]。这是通过发送 ARP 请求Leader 节点的会以其 mac 地址作为响应。外部主机会在本地 ARP 表中缓存下来下次会直接从 ARP 表中获取。请求到达节点后节点再通过 kube-proxy 将请求负载均衡目标 Pod。所以说假如Service 是多 Pod 这里有可能会再跳去另一台主机。sequence优缺点优点很明显实现起来简单相对于另一种 BGP 模式下路由器要支持 BPG。就像笔者的环境一样只要保证 IP 地址库与集群是同一个网段即可。当然缺点更加明显了Leader 节点的带宽会成为瓶颈与此同时可用性欠佳故障转移需要 10 秒钟的时间每个 speaker 进程有个 10s 的循环[11]。参考链接Service 官方文档: https://kubernetes.io/zh/docs/concepts/services-networking/service/#publishing-services-service-types MetalLB: https://metallb.universe.tfProxmox 的虚拟机: https://atbug.com/deploy-vm-on-proxmox-with-terraform/K3s 文档: https://rancher.com/docs/k3s/latest/en/networking/Traefik: https://rancher.com/docs/k3s/latest/en/networking/Klipper: https://metallb.universe.tf/configuration/k3s/Helm: https://metallb.universe.tf/installation/#installation-with-helmKustomize: https://metallb.universe.tf/installation/#installation-with-kustomizeMetalLB Operator: https://metallb.universe.tf/installation/#using-the-metallb-operator维基百科: https://zh.wikipedia.org/wiki/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AE每个 speaker 进程有个 10s 的循环https://github.com/metallb/metallb/blob/main/internal/layer2/announcer.go#L51地址解析协议: https://zh.wikipedia.org/wiki/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AEMetalLB 概念: https://metallb.universe.tf/concepts/往期推荐为什么大家都在抵制用定时任务实现「关闭超时订单」功能如果被问到分布式锁应该怎样回答别再用 Redis List 实现消息队列了Stream 专为队列而生Java 底层知识什么是 “桥接方法” 点分享点收藏点点赞点在看
http://www.zqtcl.cn/news/994384/

相关文章:

  • 网站开发包含哪些网站设计实例
  • 网站建设 核算棋牌源码论坛
  • 杭州网站建设案例网页设计程序
  • 网站建设的相关问题湛江网站开发
  • 网站开发作业wordpress用户角色
  • 品牌网站制作建设微信小程序开发需要什么技术
  • 新网站注册国内食品行业网站开发
  • 太原微商网站建设网站里面的视频功能怎么做的
  • 绿色做环保网站的好处网易企业邮箱登录登录入口
  • 卯兔科技网站建设网站验收时项目建设总结报告
  • 触摸网站手机wordpress建立模板下载
  • 做暧在线观看网站网站建设与管理工资
  • 横岗网站建设无锡网站seo外包
  • 房管局 网站做房查学做网站推广要多久时间
  • 电脑网站开发者模式田园综合体建设网站
  • 南宁广告公司网站建设自适应网站建设模板
  • 做北京电梯招标的网站衡阳县专业做淘宝网站
  • 建设网站的语言wordpress主题自定义添加后台设置
  • 制造动漫网站开发目的四川酒店网站建设
  • 中国城市建设研究院深圳分院网站广西圣泰建设工程有限公司网站
  • 网站建设的方法有哪些内容wordpress展示插件
  • 北京手机网站制作公司wordpress 简易教程
  • 手机网站建站公司有哪些搜索引擎收录
  • 仿同程网 连锁酒店 网站模板学校网站建设用哪个系统
  • 教做甜品的网站删除wordpress主题字体载入
  • 做酒店网站所用到的算法wordpress侧栏导航
  • 做漫画的网站有哪些信息门户网站怎么做
  • 九江集团网站建设公司信誉好的广州做网站
  • 福州网站建设服务平台今天发生的重大新闻
  • 招聘信息网搜索引擎优化代理