云原生之深入解析Linkerd Service Mesh的功能和使用

一、简介

  • Linkerd 是 Kubernetes 的一个完全开源的服务网格实现,它通过为你提供运行时调试、可观测性、可靠性和安全性,使运行服务更轻松、更安全,所有这些都不需要对代码进行任何更改。
  • Linkerd 通过在每个服务实例旁边安装一组超轻、透明的代理来工作,这些代理会自动处理进出服务的所有流量。由于它们是透明的,这些代理充当高度仪表化的进程外网络堆栈,向控制平面发送遥测数据并从控制平面接收控制信号。这种设计允许 Linkerd 测量和操纵进出服务的流量,而不会引入过多的延迟。为了尽可能小、轻和安全,Linkerd 的代理采用 Rust 编写。

二、功能

  • 自动 mTLS:Linkerd 自动为网格应用程序之间的所有通信启用相互传输层安全性 (TLS)。
  • 自动代理注入:Linkerd 会自动将数据平面代理注入到基于 annotations 的 pod 中。
  • 容器网络接口插件:Linkerd 能被配置去运行一个 CNI 插件,该插件自动重写每个 pod 的 iptables 规则。
  • 仪表板和 Grafana:Linkerd 提供了一个 Web 仪表板,以及预配置的 Grafana 仪表板。
  • 分布式追踪:您可以在 Linkerd 中启用分布式跟踪支持。
  • 故障注入:Linkerd 提供了以编程方式将故障注入服务的机制。
  • 高可用性:Linkerd 控制平面可以在高可用性 (HA) 模式下运行。
  • HTTP、HTTP/2 和 gRPC 代理:Linkerd 将自动为 HTTP、HTTP/2 和 gRPC 连接启用高级功能(包括指标、负载平衡、重试等)。
  • Ingress:Linkerd 可以与您选择的 ingress controller 一起工作。
  • 负载均衡:Linkerd 会自动对 HTTP、HTTP/2 和 gRPC 连接上所有目标端点的请求进行负载平衡。
  • 多集群通信:Linkerd 可以透明且安全地连接运行在不同集群中的服务。
  • 重试和超时:Linkerd 可以执行特定于服务的重试和超时。
  • 服务配置文件:Linkerd 的服务配置文件支持每条路由指标以及重试和超时。
  • TCP 代理和协议检测:Linkerd 能够代理所有 TCP 流量,包括 TLS 连接、WebSockets 和 HTTP 隧道。
  • 遥测和监控:Linkerd 会自动从所有通过它发送流量的服务收集指标。
  • 流量拆分(金丝雀、蓝/绿部署):Linkerd 可以动态地将一部分流量发送到不同的服务。

三、安装

  • 可以通过在本地安装一个 Linkerd 的 CLI 命令行工具,通过该 CLI 可以将 Linkerd 的控制平面安装到 Kubernetes 集群上。因此,首先需要在本地运行 kubectl 命令,确保可以访问一个可用的 Kubernetes 集群,如果没有集群,可以使用 KinD 在本地快速创建一个。
$ kubectl version --short
Client Version: v1.23.5
Server Version: v1.22.8
  • 可以使用下面的命令在本地安装 Linkerd 的 CLI 工具:
$ curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
  • 如果是 Mac 系统,同样还可以使用 Homebrew 工具一键安装:
$ brew install linkerd
  • 同样直接前往 Linkerd Release 页面 下载安装即可。安装后使用下面的命令可以验证 CLI 工具是否安装成功:
$ linkerd  version
Client version: stable-2.11.1
Server version: unavailable
  • 正常可以看到 CLI 的版本信息,但是会出现 Server version: unavailable 信息,这是因为还没有在 Kubernetes 集群上安装控制平面造成的,因此接下来就来安装 Server 端。Kubernetes 集群可以通过多种不同的方式进行配置,在安装 Linkerd 控制平面之前,需要检查并验证所有配置是否正确,要检查集群是否已准备好安装 Linkerd,可以执行下面的命令:
$ linkerd check --pre
Linkerd core checks
===================kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes APIkubernetes-version
------------------
√ is running the minimum Kubernetes API version
√ is running the minimum kubectl versionpre-kubernetes-setup
--------------------
√ control plane namespace does not already exist
√ can create non-namespaced resources
√ can create ServiceAccounts
√ can create Services
√ can create Deployments
√ can create CronJobs
√ can create ConfigMaps
√ can create Secrets
√ can read Secrets
√ can read extension-apiserver-authentication configmap
√ no clock skew detectedlinkerd-version
---------------
√ can determine the latest version
‼ cli is up-to-dateis running version 2.11.1 but the latest stable version is 2.11.4see https://linkerd.io/2.11/checks/#l5d-version-cli for hintsStatus check results are √
  • 如果一切检查都 OK 则可以开始安装 Linkerd 的控制平面,直接执行下面的命令即可一键安装:
$ linkerd install | kubectl apply -f -
  • 在此命令中,linkerd install 会生成一个 Kubernetes 资源清单文件,其中包含所有必要的控制平面资源,然后使用 kubectl apply 命令即可将其安装到 Kubernetes 集群中。可以看到会将 Linkerd 控制面安装到一个名为 linkerd 的命名空间之下,安装完成后会有如下几个 Pod 运行:
$ kubectl get pods -n linkerd
NAME                                      READY   STATUS    RESTARTS       AGE
linkerd-destination-79d6fc496f-dcgfx      4/4     Running   0              166m
linkerd-identity-6b78ff444f-jwp47         2/2     Running   0              166m
linkerd-proxy-injector-86f7f649dc-v576m   2/2     Running   0              166m
  • 安装完成后通过运行以下命令等待控制平面准备就绪,并可以验证安装结果是否正常:
$ linkerd checkLinkerd core checks
===================kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes APIkubernetes-version
------------------
√ is running the minimum Kubernetes API version
√ is running the minimum kubectl versionlinkerd-existence
-----------------'linkerd-config' config map exists
√ heartbeat ServiceAccount exist
√ control plane replica sets are ready
√ no unschedulable pods
√ control plane pods are ready
√ cluster networks contains all node podCIDRslinkerd-config
--------------
√ control plane Namespace exists
√ control plane ClusterRoles exist
√ control plane ClusterRoleBindings exist
√ control plane ServiceAccounts exist
√ control plane CustomResourceDefinitions exist
√ control plane MutatingWebhookConfigurations exist
√ control plane ValidatingWebhookConfigurations existlinkerd-identity
----------------
√ certificate config is valid
√ trust anchors are using supported crypto algorithm
√ trust anchors are within their validity period
√ trust anchors are valid for at least 60 days
√ issuer cert is using supported crypto algorithm
√ issuer cert is within its validity period
√ issuer cert is valid for at least 60 days
√ issuer cert is issued by the trust anchorlinkerd-webhooks-and-apisvc-tls
-------------------------------
√ proxy-injector webhook has valid cert
√ proxy-injector cert is valid for at least 60 days
√ sp-validator webhook has valid cert
√ sp-validator cert is valid for at least 60 days
√ policy-validator webhook has valid cert
√ policy-validator cert is valid for at least 60 dayslinkerd-version
---------------
√ can determine the latest version
‼ cli is up-to-dateis running version 2.11.1 but the latest stable version is 2.11.4see https://linkerd.io/2.11/checks/#l5d-version-cli for hintscontrol-plane-version
---------------------
√ can retrieve the control plane version
‼ control plane is up-to-dateis running version 2.11.1 but the latest stable version is 2.11.4see https://linkerd.io/2.11/checks/#l5d-version-control for hints
√ control plane and cli versions matchlinkerd-control-plane-proxy
---------------------------
√ control plane proxies are healthy
‼ control plane proxies are up-to-datesome proxies are not running the current version:* linkerd-destination-79d6fc496f-dcgfx (stable-2.11.1)* linkerd-identity-6b78ff444f-jwp47 (stable-2.11.1)* linkerd-proxy-injector-86f7f649dc-v576m (stable-2.11.1)see https://linkerd.io/2.11/checks/#l5d-cp-proxy-version for hints
√ control plane proxies and cli versions matchStatus check results are √
  • 当出现上面的 Status check results are √ 信息后表示 Linkerd 的控制平面安装成功。除了使用 CLI 工具的方式安装控制平面之外,也可以通过 Helm Chart 的方式来安装,如下所示:
$ helm repo add linkerd https://helm.linkerd.io/stable
# set expiry date one year from now, in Mac:
$ exp=$(date -v+8760H +"%Y-%m-%dT%H:%M:%SZ")
# in Linux:
$ exp=$(date -d '+8760 hour' +"%Y-%m-%dT%H:%M:%SZ")$ helm install linkerd2 \--set-file identityTrustAnchorsPEM=ca.crt \--set-file identity.issuer.tls.crtPEM=issuer.crt \--set-file identity.issuer.tls.keyPEM=issuer.key \--set identity.issuer.crtExpiry=$exp \linkerd/linkerd2
  • 此外该 chart 包含一个 values-ha.yaml 文件, 它覆盖了一些默认值,以便在高可用性场景下进行设置,类似于 linkerd install 中的 --ha 选项,可以通过获取 chart 文件来获得 values-ha.yaml:
$ helm fetch --untar linkerd/linkerd2
  • 然后使用 -f flag 提供覆盖文件,例如:
## see above on how to set $exp
helm install linkerd2 \--set-file identityTrustAnchorsPEM=ca.crt \--set-file identity.issuer.tls.crtPEM=issuer.crt \--set-file identity.issuer.tls.keyPEM=issuer.key \--set identity.issuer.crtExpiry=$exp \-f linkerd2/values-ha.yaml \linkerd/linkerd2
  • 采用哪种方式进行安装均可,到这里就完成了 Linkerd 的安装,重新执行 linkerd version 命令就可以看到 Server 端版本信息:
$ linkerd version
Client version: stable-2.11.1
Server version: stable-2.11.1

四、 示例

  • 接下来安装一个简单的示例应用 Emojivoto,该应用是一个简单的独立 Kubernetes 应用程序,它混合使用 gRPC 和 HTTP 调用,允许用户对他们最喜欢的表情符号进行投票。通过运行以下命令可以将 Emojivoto 安装到 emojivoto 命名空间中:
$ curl -fsL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -
namespace/emojivoto created
serviceaccount/emoji created
serviceaccount/voting created
serviceaccount/web created
service/emoji-svc created
service/voting-svc created
service/web-svc created
deployment.apps/emoji created
deployment.apps/vote-bot created
deployment.apps/voting created
deployment.apps/web created
  • 该应用下可以看到一共包含 4 个 Pod 服务:
$ kubectl get pods -n emojivoto
NAME                        READY   STATUS    RESTARTS   AGE
emoji-66ccdb4d86-6vqvt      1/1     Running   0          91s
vote-bot-69754c864f-k26fb   1/1     Running   0          91s
voting-f999bd4d7-k44nb      1/1     Running   0          91s
web-79469b946f-bz295        1/1     Running   0          91s
$ kubectl get svc -n emojivoto
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
emoji-svc    ClusterIP   10.111.7.125     <none>        8080/TCP,8801/TCP   2m49s
voting-svc   ClusterIP   10.105.192.118   <none>        8080/TCP,8801/TCP   2m48s
web-svc      ClusterIP   10.111.236.171   <none>        80/TCP              2m48s
  • 可以通过 port-forward 来暴露 web-svc 服务,然后便可在浏览器中访问该应用:
$ kubectl -n emojivoto port-forward svc/web-svc 8080:80
  • 现在可以在浏览器通过 http://localhost:8080 访问 Emojivoto 应用:

在这里插入图片描述

  • 可以选择页面中喜欢的表情进行投票,但是选择某些表情后会出现一些错误,比如当点击甜甜圈表情符号的时候会得到一个 404 页面:

在这里插入图片描述

  • 不过不用担心,这是应用中故意留下的错误,为的是后面使用 Linkerd 来识别该问题。接下来可以将上面的示例应用加入到 Service Mesh 中来,向其添加 Linkerd 的数据平面代理,直接运行下面的命令即可将 Emojivoto 应用网格化:
$ kubectl get -n emojivoto deploy -o yaml \| linkerd inject - \| kubectl apply -f -deployment "emoji" injected
deployment "vote-bot" injected
deployment "voting" injected
deployment "web" injecteddeployment.apps/emoji configured
deployment.apps/vote-bot configured
deployment.apps/voting configured
deployment.apps/web configured
  • 上面的命令首先获取在 emojivoto 命名空间中运行的所有 Deployments,然后通过 linkerd inject 运行它们的清单,然后将其重新应用到集群。注意 linkerd inject 命令只是在 Pod 规范中添加一个 linkerd.io/inject: enabled 的注解,并不会直接注入一个 Sidecar 容器,该注解即可指示 Linkerd 在创建 Pod 时将代理注入到其中,所以执行上面的命令后应用 Pod 中会新增一个 sidecar 的代理容器。
$ kubectl get pods -n emojivoto
NAME                        READY   STATUS    RESTARTS   AGE
emoji-696d9d8f95-8wrmg      2/2     Running   0          34m
vote-bot-6d7677bb68-c98kb   2/2     Running   0          34m
voting-ff4c54b8d-rdtmk      2/2     Running   0          34m
web-5f86686c4d-qh5bz        2/2     Running   0          34m
  • 可以看到每个 Pod 现在都有 2 个容器,相较于之前多了一个 Linkerd 的 sidecar 代理容器:

在这里插入图片描述

  • 当应用更新完成后,就成功将应用引入到 Linkerd 的网格服务中来了,新增的代理容器组成了数据平面,也可以通过下面的命令检查数据平面状态:
$ linkerd -n emojivoto check --proxy
Linkerd core checks
===================kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes APIkubernetes-version
------------------
√ is running the minimum Kubernetes API version
√ is running the minimum kubectl versionlinkerd-existence
-----------------'linkerd-config' config map exists
√ heartbeat ServiceAccount exist
√ control plane replica sets are ready
√ no unschedulable pods
√ control plane pods are ready
√ cluster networks contains all node podCIDRslinkerd-config
--------------
√ control plane Namespace exists
√ control plane ClusterRoles exist
√ control plane ClusterRoleBindings exist
√ control plane ServiceAccounts exist
√ control plane CustomResourceDefinitions exist
√ control plane MutatingWebhookConfigurations exist
√ control plane ValidatingWebhookConfigurations existlinkerd-identity
----------------
√ certificate config is valid
√ trust anchors are using supported crypto algorithm
√ trust anchors are within their validity period
√ trust anchors are valid for at least 60 days
√ issuer cert is using supported crypto algorithm
√ issuer cert is within its validity period
√ issuer cert is valid for at least 60 days
√ issuer cert is issued by the trust anchorlinkerd-webhooks-and-apisvc-tls
-------------------------------
√ proxy-injector webhook has valid cert
√ proxy-injector cert is valid for at least 60 days
√ sp-validator webhook has valid cert
√ sp-validator cert is valid for at least 60 days
√ policy-validator webhook has valid cert
√ policy-validator cert is valid for at least 60 dayslinkerd-identity-data-plane
---------------------------
√ data plane proxies certificate match CAlinkerd-version
---------------
√ can determine the latest version
‼ cli is up-to-dateis running version 2.11.1 but the latest stable version is 2.11.4see https://linkerd.io/2.11/checks/#l5d-version-cli for hintslinkerd-control-plane-proxy
---------------------------
√ control plane proxies are healthy
‼ control plane proxies are up-to-datesome proxies are not running the current version:* linkerd-destination-79d6fc496f-dcgfx (stable-2.11.1)* linkerd-identity-6b78ff444f-jwp47 (stable-2.11.1)* linkerd-proxy-injector-86f7f649dc-v576m (stable-2.11.1)see https://linkerd.io/2.11/checks/#l5d-cp-proxy-version for hints
√ control plane proxies and cli versions matchlinkerd-data-plane
------------------
√ data plane namespace exists
√ data plane proxies are ready
‼ data plane is up-to-datesome proxies are not running the current version:* emoji-696d9d8f95-8wrmg (stable-2.11.1)* vote-bot-6d7677bb68-c98kb (stable-2.11.1)* voting-ff4c54b8d-rdtmk (stable-2.11.1)* web-5f86686c4d-qh5bz (stable-2.11.1)see https://linkerd.io/2.11/checks/#l5d-data-plane-version for hints
√ data plane and cli versions match
√ data plane pod labels are configured correctly
√ data plane service labels are configured correctly
√ data plane service annotations are configured correctly
√ opaque ports are properly annotatedStatus check results are √
  • 当然,还是可以通过 http://localhost:8080 访问应用,当然在使用上和之前没什么区别,可以通过 Linkerd 去查看应用实际上做了哪些事情,但是需要去单独安装一个插件,由于 Linkerd 的核心控制平面非常轻量级, 因此 Linkerd 附带了一些插件,这些插件为 Linkerd 添加了一些非关键但通常有用的功能,包括各种仪表板,比如可以安装一个 viz 插件,Linkerd-Viz 插件包含 Linkerd 的可观察性和可视化组件。安装命令如下所示:
$ linkerd viz install | kubectl apply -f -
  • 上面的命令会创建一个名为 linkerd-viz 的命名空间,会在该命名空间中安装监控相关的应用,比如 Prometheus、Grafana 等:
$ kubectl get pods -n linkerd-viz
NAME                            READY   STATUS    RESTARTS   AGE
grafana-8d54d5f6d-wwtdz         2/2     Running   0          3h1m
metrics-api-6c59967bf4-pjwdq    2/2     Running   0          4h22m
prometheus-7bbc4d8c5b-5rc8r     2/2     Running   0          4h22m
tap-599c774dfb-m2kqz            2/2     Running   0          4h22m
tap-injector-748d54b7bc-jvshs   2/2     Running   0          4h22m
web-db97ff489-5599v             2/2     Running   0          4h22m
  • 安装完成后,可以使用下面的命令打开一个 dashboard 页面:
$ linkerd viz dashboard &
  • 当 viz 插件部署完成后,执行上面的命令后会自动在浏览器中打开一个 Linkerd 的可观察性的 Dashboard。此外也可以通过 Ingress 来暴露 viz 服务,创建如下所示的资源对象:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: web-ingressnamespace: linkerd-vizannotations:nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084nginx.ingress.kubernetes.io/configuration-snippet: |proxy_set_header Origin "";proxy_hide_header l5d-remote-ip;proxy_hide_header l5d-server-id;
spec:ingressClassName: nginxrules:- host: linkerd.k8s.localhttp:paths:- path: /pathType: Prefixbackend:service:name: webport:number: 8084
  • 应用后就可以通过 linkerd.k8s.local 访问 viz:

在这里插入图片描述

  • 还可以显示自动生成的拓扑图:

在这里插入图片描述

  • 在页面上我们可以找到每个 Emojivoto 组件的实时指标,就可以确定哪个组件出现了部分故障了,这样就可以有针对性的去解决问题了。在对应的资源后面包含一个 Grafana 的图标,点击可以自动跳转到 Grafana 的监控页面:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MX6ULL学习笔记(十二)Linux 自带的 LED 灯

前言 前面我们都是自己编写 LED 灯驱动&#xff0c;其实像 LED 灯这样非常基础的设备驱动&#xff0c;Linux 内 核已经集成了。Linux 内核的 LED 灯驱动采用 platform 框架&#xff0c;因此我们只需要按照要求在设备 树文件中添加相应的 LED 节点即可&#xff0c;本章我们就来学…

Python基础05-函数

零、文章目录 Python基础05-函数 1、函数的作用及其使用步骤 &#xff08;1&#xff09;函数的作用 在Python实际开发中&#xff0c;我们使用函数的目的只有一个“让我们的代码可以被重复使用” 函数的作用有两个&#xff1a; ① 代码重用&#xff08;代码重复使用&#xf…

【AI工具】GitHub Copilot IDEA安装与使用

GitHub Copilot是一款AI编程助手&#xff0c;它可以帮助开发者编写代码&#xff0c;提供代码建议和自动完成功能。以下是GitHub Copilot在IDEA中的安装和使用步骤&#xff1a; 安装步骤&#xff1a; 打开IDEA&#xff0c;点击File -> Settings -> Plugins。在搜索框中输…

windows10 php8连接sql server

一、环境安装 文章目录 一、环境安装1.安装php拓展2.在 Windows 上安装PHP驱动程序3.在 Windows 上安装ODBC驱动 二、php连接sqlserver三、注意事项数据库相关设置相关语法sqlsrv_fetch_array 的示例&#xff1a;sqlsrv_fetch 的示例&#xff1a;echo 和 print_r 的不同 所用资…

Webrtc 学习交流

花了几周的时间研究了一下webrtc &#xff0c;并开发了一个小项目&#xff0c;用来点对点私密聊天 交流传输文件等…后续会继续扩展其功能。 体验地址&#xff0c;大狗子的ID,我在线时可以连接测试到我 f3e0d6d0-cfd7-44a4-b333-e82c821cd927 项目特点 除了交换信令与stun 没…

ES6 面试题 | 01.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Mybatis 动态SQL的插入操作

需求 : 根据用户的输入情况进行插入 动态SQL:根据需求动态拼接SQL 用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空 insert into userinfo(username,password,age,gender,phone) values(?,?,?,?,?); insert into userinfo(username,…

LVS-DR模式部署

目录 一、部署信息 二、部署LVS-DR模式 三、测试 四、DR模式 LVS负载均衡群集 一、部署信息 DR 服务器&#xff1a;172.16.114.70 Web 服务器1&#xff1a;172.16.114.80 Web 服务器2&#xff1a;172.16.114.60 vip&#xff1a;172.16.114.200 客户端&#xff1a;172.16.11…

STM32与Freertos入门(五)任务案例

1、实现功能 通过两个按键任务分别控制不同的点灯案例 创建 4 个任务&#xff1a;在点灯任务的基础上在创建两个按键任务&#xff1a; Task_led&#xff1a;间隔 500ms 闪烁 LE1&#xff1b; Task_led2&#xff1a;间隔 1000ms 闪烁 LED2&#xff1b; Task_key&#xff1a;如…

【Java系列】详解多线程(三)—— 线程安全(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一…

​SQL (关系型) 数据库-fastapi集成

SQL (关系型) 数据库 - FastAPI FastAPI不需要你使用SQL(关系型)数据库。 但是您可以使用任何您想要的关系型数据库。 在这里&#xff0c;让我们看一个使用着SQLAlchemy的示例。 您可以很容易地将SQLAlchemy支持任何数据库&#xff0c;像&#xff1a; PostgreSQLMySQLSQLi…

vue3 setup语法糖写法基本教程

前言 官网地址&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)下面只讲Vue3与Vue2有差异的地方&#xff0c;一些相同的地方我会忽略或者一笔带过与Vue3一同出来的还有Vite&#xff0c;但是现在不使用它&#xff0c;等以后会有单独的教程使用。目前仍旧使用v…

eNSP小实验(ACL和NAT)

一.ACL 实验目的&#xff1a;过滤流量&#xff0c;然后匹配规划后&#xff0c;判断该流量通过或拒绝 1.拓扑图 2.配置 基本ACL 其它同理配置 R1 [Huawei]sys R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]dis th [V200R003C00] # interface GigabitEthernet0/0/0 # return…

[Verilog] Verilog 基本格式和语法

主页&#xff1a; 元存储博客 全文 3000 字 文章目录 1. 声明格式1.1 模块声明1.2 输入输出声明1.3 内部信号声明1.4 内部逻辑声明1.5 连接声明1.6 数据类型声明1.7 运算符和表达式1.8 控制结构 2. 书写格式2.1 大小写2.2 换行2.3 语句结束符2.4 注释2.5 标识符2.6 关键字 1. 声…

[RTOS移植]--STM32F767移植RTThread

文章目录 通过STM32cube创建一个工程选择要移植的RTOS源下载到本地如果没有重启软件选择对应配置后续补充 通过STM32cube创建一个工程 选择要移植的RTOS源 下载到本地 如果没有重启软件 选择对应配置 Build started: Project: STM32F767 *** Using Compiler V5.06 update 7 (b…

淘宝类目信息API接口获取淘宝商品分类信息API调用说明(含APIkey密钥)

cat_get-获得淘宝分类详情 item_cat_get-获得淘宝商品类目 公共参数 名称类型必须描述keyString是调用key&#xff08;点此获取&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_…

Redis-数据结构

参考资料 极客时间Redis&#xff08;亚风&#xff09; Redis数据结构 SDS sds(Simple Dynamic String) 字符串接结构体: struct --attribute_- ((-_packed__)) sdshdr8{uint8_t len&#xff1b;/* buf已保祥的字符串字节数&#xff0c;不包含结束标示*/uint8_t alloc&#…

ArrayList和LinkedList区别

目录 一、性质不同 二、作用不同 三、特点不同 一、性质不同 1、arraylist&#xff1a;ArrayList就是动态数组&#xff0c;用MSDN中的说法&#xff0c;就是Array的复杂版本。 2、linkedlist&#xff1a;LinkedList 是一个继承于AbstractSequentialList的双向链表。 二、作…

Hadoop分布式配置小白篇(附加各阶段问题解决方式)

看的黑马的课&#xff0c;记录一下配置步骤 目录 1.VMware安装&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 2.创建虚拟机 1.ISO镜像文件获取&#xff08;CentOS&#xff09;&#xff1a; 2.创建&#xff08;简略步骤&#xff09; 3.克隆虚拟机&#xff08;克隆伪…

nodejs+vue+微信小程序+python+PHP运动项目推荐系统-计算机毕业设计推荐

运动项目推荐系统的整体架构确定以后&#xff0c;再来看运动项目推荐系统的主要功能模块图。整体的功能模块包括前台和后台&#xff0c;前台只要实现了注册用户功能&#xff0c;主要的页面&#xff0c;包括首页&#xff0c;体育资讯&#xff0c;体育项目&#xff0c;公告信息等…