在CSDN学Golang云原生(服务网格istio)

news/2024/5/10 21:18:15

一,在Kubernetes上部署istio

在Kubernetes上部署istio,可以按照以下步骤进行:

  1. 安装Istio

使用以下命令从Istio官网下载最新版本的Istio:

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=<VERSION> sh -

其中,<VERSION>是要安装的Istio版本号。

将下载的文件解压到本地目录:

tar xzf istio-<VERSION>-linux-amd64.tar.gz

进入解压后的目录:

cd istio-<VERSION>

然后,安装Istio CRDs(Custom Resource Definitions):

kubectl apply -f manifests/crds.yaml

最后,安装Istio组件和示例应用程序:

kubectl apply -f manifests/
  1. 部署应用程序

将Golang云原生应用程序打包成Docker镜像,并上传至Docker Hub等容器镜像仓库。然后,在Kubernetes中创建Deployment和Service资源对象来部署该应用程序。

例如,可以使用类似以下的YAML配置文件来创建Deployment和Service资源对象:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:replicas: 3 # 副本数为3个,可根据实际情况调整。selector:matchLabels:app: myapp-label # 标签名称为myapp-label。template:metadata:labels:app: myapp-label # 标签名称为myapp-label。spec:containers:- name: myapp-containerimage: <DOCKER_IMAGE_NAME>:<TAG>ports:- containerPort: 8080 # 应用程序监听的端口号为8080。---
apiVersion: v1
kind: Service
metadata:name: myapp-service
spec:selector:app: myapp-label # 标签名称为myapp-label。ports:- name: http-portport: 80 # 访问服务时使用的端口号。targetPort: 8080 # 实际转发到容器中的端口号是8080。

其中,<DOCKER_IMAGE_NAME><TAG>分别是应用程序打包成Docker镜像后的名称和标签。

  1. 部署istio sidecar

在部署Istio sidecar之前,需要将应用程序所在的命名空间进行标记。例如:

kubectl label namespace <NAMESPACE> istio-injection=enabled

其中,<NAMESPACE>是应用程序所在的命名空间。

然后,在部署应用程序时,Istio sidecar会自动注入到该应用程序中:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:template:metadata:labels:app: myapp-label # 标签名称为myapp-label。spec:containers:- name: myapp-containerimage: <DOCKER_IMAGE_NAME>:<TAG>ports:- containerPort: 8080 # 应用程序监听的端口号为8080。
  1. 配置Istio流量管理

在Kubernetes中,可以通过创建Gateway和VirtualService资源对象来配置Istio流量管理。例如:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: myapp-gateway
spec:selector:istio: ingressgatewayservers:- hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。port:name: http-portnumber: 80 # 访问服务时使用的端口号。---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myapp-virtualservice
spec:hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。gateways:- myapp-gateway # 关联上述定义的Gateway对象。http:- route:- destination:host: myapp-service # 关联上述定义的Service对象。port:number: 80 # 实际访问容器中应用程序所使用的端口号是80。

其中,myapp.example.com是访问该应用程序使用的域名或IP地址。

  1. 验证部署结果

完成以上步骤后,即可访问部署好的Golang云原生应用程序,并通过Istio Dashboard等工具查看其监控信息。

二,istio流量管理实践

使用Istio进行流量管理,可以按照以下步骤进行:

  1. 部署示例应用程序

在Kubernetes中部署示例应用程序。例如,可以使用类似以下的YAML配置文件来创建Deployment和Service资源对象:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:replicas: 3 # 副本数为3个,可根据实际情况调整。selector:matchLabels:app: myapp-label # 标签名称为myapp-label。template:metadata:labels:app: myapp-label # 标签名称为myapp-label。spec:containers:- name: myapp-containerimage: <DOCKER_IMAGE_NAME>:<TAG>ports:- containerPort: 8080 # 应用程序监听的端口号为8080。---
apiVersion: v1
kind: Service
metadata:name: myapp-service
spec:selector:app: myapp-label # 标签名称为myapp-label。ports:- name: http-portport: 80 # 访问服务时使用的端口号。targetPort: 8080 # 实际转发到容器中的端口号是8080。

其中,<DOCKER_IMAGE_NAME><TAG>分别是应用程序打包成Docker镜像后的名称和标签。

  1. 创建Gateway和VirtualService资源对象

创建Gateway和VirtualService资源对象来配置Istio流量管理。例如:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: myapp-gateway
spec:selector:istio: ingressgatewayservers:- hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。port:name: http-portnumber: 80 # 访问服务时使用的端口号。---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myapp-virtualservice
spec:hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。gateways:- myapp-gateway # 关联上述定义的Gateway对象。http:- route:- destination:host: myapp-service # 关联上述定义的Service对象。port:number: 80 # 实际访问容器中应用程序所使用的端口号是80。

其中,myapp.example.com是访问该应用程序使用的域名或IP地址。

  1. 配置Istio流量规则

配置Istio流量规则来控制如何将流量路由到不同版本、环境和地理位置等目标。例如:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: myapp-destinationrule
spec:host: myapp-service # 目标主机为myapp-service Service对象名称。subsets:- name: v1-subset # 将所有标签为version=v1的Pod分配给v1-subset。labels:version: v1- name: v2-subset # 将所有标签为version=v2的Pod分配给v2-subset。labels:version: v2---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myapp-virtualservice
spec:hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。gateways:- myapp-gateway # 关联上述定义的Gateway对象。http:- route:- destination:host: myapp-service # 关联上述定义的Service对象。weight: 100 # 所有流量都路由到v1版本,权重为100%。- destination:host: myapp-service # 关联上述定义的Service对象。subset: v2-subsetweight: 0 # 所有流量都不路由到v2版本,权重为0%。

其中,DestinationRule用于配置目标主机和子集信息,而VirtualService则用于配置如何将流量路由到这些目标主机和子集。在以上示例中,将所有流量都路由到v1版本,并且不进行负载均衡;而对于v2版本,则将其权重设置为0%,表示不进行任何访问。

  1. 验证部署结果

完成以上步骤后,即可验证Istio流量管理是否生效。可以通过Istio Dashboard等工具查看监控信息,或者直接访问应用程序的域名或IP地址进行验证。

Golang云原生学习路线图、教学视频、文档资料、面试题资料(资料包括C/C++、K8s、golang项目实战、gRPC、Docker、DevOps等)免费分享 有需要的可以加qun:793221798领取

三,istio安全配置实践

使用Istio进行安全配置,可以按照以下步骤进行:

  1. 部署示例应用程序

在Kubernetes中部署示例应用程序。例如,可以使用类似以下的YAML配置文件来创建Deployment和Service资源对象:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:replicas: 3 # 副本数为3个,可根据实际情况调整。selector:matchLabels:app: myapp-label # 标签名称为myapp-label。template:metadata:labels:app: myapp-label # 标签名称为myapp-label。spec:containers:- name: myapp-containerimage: <DOCKER_IMAGE_NAME>:<TAG>ports:- containerPort: 8080 # 应用程序监听的端口号为8080。---
apiVersion: v1
kind: Service
metadata:name: myapp-service
spec:selector:app: myapp-label # 标签名称为myapp-label。ports:- name: http-portport: 80 # 访问服务时使用的端口号。targetPort: 8080 # 实际转发到容器中的端口号是8080。

其中,<DOCKER_IMAGE_NAME><TAG>分别是应用程序打包成Docker镜像后的名称和标签。

  1. 创建Gateway和VirtualService资源对象

创建Gateway和VirtualService资源对象来配置Istio流量管理。例如:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: myapp-gateway
spec:selector:istio: ingressgatewayservers:- hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。port:name: http-portnumber: 80 # 访问服务时使用的端口号。---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myapp-virtualservice
spec:hosts:- "myapp.example.com" # 访问该应用程序使用的域名或IP地址。gateways:- myapp-gateway # 关联上述定义的Gateway对象。http:- route:- destination:host: myapp-service # 关联上述定义的Service对象。port:number: 80 # 实际访问容器中应用程序所使用的端口号是80。

其中,myapp.example.com是访问该应用程序使用的域名或IP地址。

  1. 配置Istio安全规则

配置Istio安全规则来保护和控制对应用程序进行访问。例如:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:name: myapp-authorizationpolicy
spec:selector:matchLabels:app: myapp-labelversion: v1env: prodaction : ALLOW

其中,AuthorizationPolicy可以设置在集群范围、命名空间范围或者单个服务范围内,并且可以根据标签选择器匹配目标对象。在以上示例中,对于标签为app=myapp-labelversion=v1env=prod的Pod进行访问控制,允许所有操作。

  1. 验证部署结果

完成以上步骤后,即可验证Istio安全配置是否生效。可以通过Istio Dashboard等工具查看监控信息,或者直接访问应用程序的域名或IP地址进行验证。注意,在实际生产环境中,需要根据实际情况调整安全策略和权限规则。

四,使用Prometheus进行生产规模的监控

使用Prometheus进行生产规模的监控,可以按照以下步骤进行:

  1. 安装和配置Prometheus

安装并配置Prometheus服务器。例如,在Kubernetes中部署一个Prometheus实例,并将其配置为收集指定名称空间中所有Pod的指标数据:

apiVersion: v1
kind: ServiceAccount
metadata:name: prometheus-server
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: prometheus-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin # 授予Prometheus访问全部资源的权限。
subjects:
- kind: ServiceAccountname: prometheus-server # 将Prometheus服务帐户与角色绑定。
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:name: prometheus-deployment
spec:replicas: 1 # 可根据实际情况调整副本数。selector:matchLabels:app: prometheus-server # 指定应用程序标签为prometheus-server。template:metadata:labels:app: prometheus-server # 指定应用程序标签为prometheus-server。spec:serviceAccountName : prometheus-servercontainers:- name : prometheusimage : quay.io/prometheus/prometheuargs :- "--config.file=/etc/prometheu/prometheu.yml"ports :- containerPort :9090volumeMounts :- mountPath : /etc/prometheusname : config-volumevolumes :- name : config-volumeconfigMap :name : prometheus-server-configmap---
apiVersion: v1
kind: Service
metadata:name: prometheus-service
spec:type: NodePort # 可以根据实际情况调整暴露方式。selector:app: prometheus-server # 指定应用程序标签为prometheus-server。ports:- port: 9090 # Prometheus服务器的监听端口号。targetPort: 9090 # 实际转发到容器中的端口号是9090。

其中,prometheus-server-configmap是一个配置映射,包含了Prometheus的配置文件。例如:

apiVersion: v1
kind: ConfigMap
metadata:name: prometheus-server-configmap
data:prometheu.yml: |global:scrape_interval :15sscrape_configs :- job_name : "kubernetes-pods"kubernetes_sd_configs:- role: podrelabel_configs:- source_labels : [__meta_kubernetes_pod_label_app]regex : myapp-labelaction : keep
  1. 部署示例应用程序和Exporter组件

在Kubernetes中部署示例应用程序,并且使用Exporter组件将其指标数据暴露给Prometheus服务器。例如,可以使用以下YAML配置文件创建Deployment和Service资源对象:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:replicas: 3 # 副本数为3个,可根据实际情况调整。selector:matchLabels:app: myapp-label # 标签名称为myapp-label。template:metadata:labels:app: myapp-label # 标签名称为myapp-label。spec:containers:- name: myapp-containerimage: <DOCKER_IMAGE_NAME>:<TAG>ports:- containerPort: 8080 # 应用程序监听的端口号为8080。---
apiVersion: v1
kind: Service
metadata:name: myapp-service
spec:selector:app: myapp-label # 标签名称为myapp-label。ports:- name: http-portport: 80 # 访问服务时使用的端口号。targetPort: 8080 # 实际转发到容器中的端口号是8080。

其中,<DOCKER_IMAGE_NAME><TAG>分别是应用程序打包成Docker镜像后的名称和标签。

接下来,部署一个Prometheus Exporter组件。例如,在Kubernetes中使用以下YAML配置文件创建Deployment和Service资源对象:

apiVersion : apps/v1kind : Deploymentmetadata :name : prometheus-exporter-deploymentspec :replicas : 1selector :matchLabels :name : prometheus-exportertemplate :metadata :labels :name : prometheus-exporterspec:containers:- name : prometheus-exporterimage : quay.io/prometheus/node_exporte:v0.18.1ports:- containerPort :9100resources:requests :cpu : "100m"memory : "100Mi"limits :cpu : "200m"memory : "200Mi"

其中,node_exporter:v0.18.1是一个Prometheus Exporter组件镜像,可以将主机的指标数据暴露给Prometheus服务器。

  1. 配置Prometheus规则

配置Prometheus规则来定义需要监控的指标。例如:

groups:- name: myapp-rulesrules:- alert: HighRequestLatencyexpr: job:request_latency_seconds_mean5m{job="myapp"} > 0.5for: 10slabels:severity: warningannotations:summary: High request latency on {{ $labels.instance }}description: "{{ $labels.instance }} has a request latency above 0.5 seconds ({{ printf "%.2f" $value }}s)"

其中,request_latency_seconds_mean_5m{job="myapp"}是示例应用程序中请求延迟的平均值。

  1. 验证部署结果

完成以上步骤后,即可验证Prometheus是否正确地收集和显示各种指标数据。可以通过Prometheus Web UI等工具查看监控信息,并且根据实际情况调整监控策略和报警规则。


http://www.mrgr.cn/p/10306230

相关文章

代码版本管理工具 git

1. 去B站看视频学习&#xff0c;只看前39集&#xff1a; 01-Git概述&#xff08;Git历史&#xff09;_哔哩哔哩_bilibili 2.学习Linux系统文本编辑器的使用 vi编辑器操作指令分享 (baidu.com) (13条消息) nano编辑器的使用_SudekiMing的博客-CSDN博客 windows下载安装Git官…

使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【C++】开源:Boost网络库Asio配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

小程序----配置原生内置编译插件支持sass

修改project.config.json配置文件 在 project.config.json 文件中&#xff0c;修改setting 下的 useCompilerPlugins 字段为 ["sass"]&#xff0c; 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件&#xff1a;typescript、less、sass 修改之后可以将原.w…

GNSS技术知识你知道多少?这些你或许还未掌握

GNSS信号频段 GNSS频谱图展示了不同的GNSS信号及其星座、载波频率、调制方案&#xff0c;以及所有这些信号在同一L波段频段内如何相互关联&#xff0c;是GNSS专业人员的必备工具&#xff0c;包括设计和开发GNSS系统的工程师&#xff0c;以及测试GNSS系统的工程师。 GNSS术语 …

基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…

shopee,lazada,etsy店群如何高效安全的管理

对于电商卖家来说&#xff0c;要经营多个店铺&#xff0c;管理多个账号是非常常见的操作。为了避免账号关联被平台识别出来&#xff0c;需要使用防关联的浏览器来进行操作 ​1、支持多平台 支持同时管理多个电商平台店铺&#xff0c;Shopee、Lazada、etsy、poshmark、vinted等&…

网络安全(黑客)自学——从0开始

为什么学习黑客知识&#xff1f;有的人是为了耍酷&#xff0c;有的人是为了攻击&#xff0c;更多的人是为了防御。我觉得所有人都应该了解一些安全知识&#xff0c;了解基本的进攻原理。这样才可以更好的保护自己。这也是这系列文章的初衷。让大家了解基本的进攻与防御。 一、怎…

Redis学习路线(6)—— Redis的分布式锁

一、分布式锁的模型 &#xff08;一&#xff09;悲观锁&#xff1a; 认为线程安全问题一定会发生&#xff0c;因此在操作数据之前先获取锁&#xff0c;确保线程串行执行。例如Synchronized、Lock都属于悲观锁。 优点&#xff1a; 简单粗暴缺点&#xff1a; 性能略低 &#x…

2024届IC秋招兆易创新数字IC后端笔试面试题

数字IC后端实现PR阶段设计导入需要哪些文件&#xff1f; 设计导入需要的文件如下图所示。这个必须熟练掌握。只要做过后端训练营项目的&#xff0c;对这个肯定是比较熟悉的。大家还要知道每个input文件的作用是什么。 在吾爱IC后端训练营Cortexa7core项目中&#xff0c;你认为…

uniapp 语音文本播报功能

最近uniapp项目上遇到一个需求 就是在接口调用成功的时候加上语音播报 &#xff0c; ‘创建成功’ ‘开始成功’ ‘结束成功’ 之类的。 因为是固定的文本 &#xff0c;所以我先利用工具生成了 文本语音mp3文件&#xff0c;放入项目中&#xff0c;直接用就好了。 这里用到的工…

java快速生成数据库表文档(HTML、DOC、MD)

在企业级开发中、我们经常会有编写数据库表结构文档的时间付出&#xff0c;关于数据库表结构文档状态&#xff1a;要么没有、要么有、但都是手写、后期运维开发&#xff0c;需要手动进行维护到文档中&#xff0c;很是繁琐&#xff0c;这里推荐一个开源项目&#xff1a;screw gi…

大促之前全链路压测监控

1. skywalking服务监控 1.1 skywalking简介 Skywalking 是一个APM系统&#xff0c;即应用性能监控系统&#xff0c;为微服务架构和云原生架构系统设计 它通过探针自动收集所需的指标&#xff0c;并进行分布式追踪&#xff0c;通过这些调用链路以及指标&#xff0c;Skywalking …

VMware搭建Hadoop集群 for Windows(完整详细,实测可用)

目录 一、VMware 虚拟机安装 &#xff08;1&#xff09;虚拟机创建及配置 &#xff08;2&#xff09;创建工作文件夹 二、克隆虚拟机 三、配置虚拟机的网络 &#xff08;1&#xff09;虚拟网络配置 &#xff08;2&#xff09;配置虚拟机 主机名 &#xff08;3&#xf…

1.Flink概述

1.1 技术架构 应用框架层: 在API层之上构建的满足特定应用场景的计算框架&#xff0c;总体上分为流计算和批处理两类应用框架。API 层&#xff1a; Flink对外提供能力的接口 &#xff0c;实现了面向流计算的DataStream API和面向批处理的DataSet API。运行时层&#xff1a;Flin…

golang waitgroup

案例 WaitGroup 可以解决一个 goroutine 等待多个 goroutine 同时结束的场景&#xff0c;这个比较常见的场景就是例如 后端 worker 启动了多个消费者干活&#xff0c;还有爬虫并发爬取数据&#xff0c;多线程下载等等。 我们这里模拟一个 worker 的例子 package mainimport (…

振弦采集仪完整链条的岩土工程隧道安全监测

振弦采集仪完整链条的岩土工程隧道安全监测 隧道工程是一种特殊的地下工程&#xff0c;其建设过程及运行期间&#xff0c;都受到各种内外力的作用&#xff0c;如水压、地震、地质变形、交通荷载等&#xff0c;这些因素都会对隧道的安全性产生影响。因此&#xff0c;对隧道的安…

机器学习-Gradient Descent

机器学习(Gradient Descent) videopptblog 梯度下降(Gradient Descent) optimization problem: 损失函数最小化 假设本模型有两个参数&#x1d703;1和&#x1d703;2&#xff0c;随机取得初始值 求解偏微分&#xff0c;梯度下降对参数进行更新 Visualize: 确定梯度方向&…

强化学习QLearning 进行迷宫游戏和代码

强化学习是机器学习里面的一个分支。它强调基于环境而探索行动、学习&#xff0c;以取得最大化的预期收益。其灵感来源于心理学中的行为主义理论&#xff0c;既有机体如何在环境给予的奖励或者惩罚的刺激下&#xff0c;逐步形成对刺激的预期&#xff0c;产生能够最大利益的习惯…

七、Kafka源码分析之网络通信

1、生产者网络设计 架构设计图 2、生产者消息缓存机制 1、RecordAccumulator 将消息缓存到RecordAccumulator收集器中, 最后判断是否要发送。这个加入消息收集器&#xff0c;首先得从 Deque 里找到自己的目标分区&#xff0c;如果没有就新建一个批量消息 Deque 加进入 2、消…