envoy官方example运行失败问题处理

镜像内安装包失败处理 方法一:修改Dockerfile,在Dockerfile中增加如下 ubuntu示例 text 1 2 RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list RUN sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list apline示例 text 1 RUN sed -i 's@http://dl-cdn.alpinelinux.org/@https://mirrors.aliyun.com/@g' /etc/apk/repositories 方法二:使用http代理, ubuntu 参考 命令行使用代理 下载镜像失败处理 方法一:docker宿主机使用ss,开启局域网可连接。同局域网中的都可直接连此代理 方法二: docker systemd的 service文件中增加http代理 可看到已经可以成功运行envoy example示例 cannot bind ‘0.0.0.0:80’: Permission denied docker-compose文件 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest volumes: - ....

服务网格安全体系

服务网格安全框架 Microservice Security Basics 零信任安全 | 什么是零信任网络? 零信任是一种安全模型,其基础是维护严格的访问控制并且默认不信任任何人,即便是已在网络边界内的人。零信任安全 IAAA (Identification and Authentication, Authorization and Accountability Identification: 必须支持多个身份和属性 Your name, username, ID number, employee number, SSN etc. “I am Thor”. Authentication: 必须支持多种认证方式以及委托认证方式 Authorization: 对于单个请求的授权可以在请求路径中的多个点确认 Accountability: 从API中捕获相关安全数据或元数据 服务网格常见安全解决方案 网络级别控制 Network Level Contros local isolation 主机隔离 Network segementation 网络分割 意味着新人底层的服务器及网络设施,信任隔离机制及实现过程且信任网段内的所有组件; SSL/TLS mTLS、spiffe/spire 应用级别控制 Network Level Contros 传统网络令牌认证 Traditional Web Tokens API-oriented Tokens OAuth 2.0 OpenID Connect JWT TokenTypes Opaque tokens Transparent tokens 基于cookie的会话 cookie based sessions SAML Security Assertion Markup Language 一种基于XML开源标准的数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。 Envoy的身份认证机制 传输认证 传输认证:即服务组件的认证,它基于双向TLS实现传输认证(即mTLS),包括双向认证、信道安全和证书自动管理;每个服务都需要有其用于服务间双向认证的标识,以实现此种认证机制;...

Envoy路由管理

HTTP 链接管理 envoy处理用户请求逻辑 ① 用户请求报文到达七层过滤器链处理机制后,首先根据请求HTTP报文中的 Host 首部来完成虚拟主机的选择;② 由此虚拟机主机内部的 Route 表项进行处理。③ 后由 match 进行匹配; Match 是与请求URL的 PATH 组成部分或请求报文的标头部分 header 。④ 最后才可到达 Route 进行 direct_response 、redirect 等。 官方手册 Envoy通过内置的L4过滤器HTTP连接管理器将原始字节转换为HTTP应用层协议级别的消息和事件,例如接收到的标头和主体等,以及处理所有HTTP连接和请求共有的功能,包括访问日志、生成和跟踪请求ID,请求/响应头处理、路由表管理和统计信息等; 支持HTTP/1.1、WebSockets和HTTP/2,但不支持SPDY; 关联的路由表可静态配置,亦可经由 xDS API 中的 RDS 动态生成; 内建重试插件,可用于配置重试行为; Host Predicates Priority Predicates 内建支持302重定向,它可以捕获302重定向响应,合成新请求后将其发送到新的路由匹配(match)所指定的上游端点,并将收到的响应作为对原始请求的响应返回客户端 支持适用于HTTP连接及其组成流(constituent streams)的多种可配置超时机制 连接级别:空闲超时和排空超时(GOAWAY); 流级别:空闲超时、每路由相关的上游端点超时和每路由相关的 gRPC 最大超时时长; 基于自定义集群的动态转发代理; HTTP协议相关的功能通过各HTTP过滤器实现,这些过滤器大体可分为编码器、解码器和编/解码器三类; router envoy.router 是最常的过滤器之一,它基于路由表完成请求的转发或重定向,以及处理重试操作和生成统计信息等; HTTP 路由 Envoy基于HTTP router过滤器基于路由表完成多种高级路由机制,例如: 将域名映射到虚拟主机; path的前级 prefix 匹配、精确匹配或正则表达式匹配; 虚拟主机级别的TLS重定向; path级别的 path/host 重定向; direct_response ,由Envoy直接生成响应报文 ; 显式 host rewrite; prefix rewrite; 基于HTTP标头或路由配置的请求重试与请求超时; 基于运行时参数的流量迁移; 基于权重或百分比的跨集群流量分割; 基于任意标头匹配路由规则; 基于优先级的路由; 基于hash策略的路由; 路由配置和虚拟主机 路由配置中的顶级元素是虚拟主机...

envoy流量管理

灰度发布 概述 新版本上线时,无论是出于产品稳定性还是用户接受程度等方面因素的考虑,直接以新代旧都充满风险;于是,通行做法是新老版本同时在线,且一开始仅分出较小比例的流量至新版本,待确认新版本没问题后再逐级加大流量切换。 灰度发布是迭代的软件产品在生产环境安全上线的一种重要手段,对于Envoy来说,灰度发布仅是流量治理的一种典型应用;以下是几种常见的场景口金丝雀发布 - 蓝绿发布 - A/B测试 - 流量镜像 灰度策略 需要在生产环境发布一个新的待上线版本时,需要事先添加一个灰度版本,而后将原有的生产环境的默认版本的流量引流一部分至此灰度版本,配置的引流机制即为灰度策略,经过评估稳定后,即可配置此灰度版本接管所有流量,并下线老版本。 常用的策略类型大体可分为 “基于请求内容发布”和“基于流量比例发布”两种类型 基于请求内容发布:配置相应的请求内容规则,满足相应规则服务流量会路由到灰度版本;例如对于http请求,通过匹配特定的Cookie标头值完成引流 Cookie内容: 完全匹配:当且仅当表达式完全符合此情况时,流量才会走到这个版本; 正则匹配:此处需要您使用正则表达式来匹配相应的规则; 自定义Header: 完全匹配:当且仅当表达式完全符合此情况时,流量才会走到这个版本; 正则匹配:此处需要您使用正则表达式来匹配相应的规则;可以自定义请求头的key和value,value支持完全匹配和正则匹配; 基于流量比例发布:对灰度版本配置期望的流量权重,将服务流量以指定权重比例引流到灰度版本;例如10%的流量分配为新版本,90%的流量保持在老版本。这种灰度策略也可以称为AB测试; 注:所有版本的权重之和为100; 灰度发布的实现方式 基于负载均衡器进行灰度发布 在服务入口的支持流量策略的负载均衡器上配置流量分布机制 仅支持对入口服务进行灰度,无法支撑后端服务需求 基于Kubernetes进行灰度发布 根据新旧版本应用所在的Pod数量比例进行流量分配,不断滚动更新旧版本Pod到新版本(先增后减、先减后增、又增又减);服务入口通常是Service或Ingress。 基于服务网格进行灰度发布 对于Envoy或lstio来说,灰度发布仅是流量治理机制的一种典型应用。通过控制平面,将流量配置策略分发至对目标服务的请求发起方的envoy sidecar上即可。 支持基于请求内容的流量分配机制,例如浏览器类型、cookie等。 服务访问入口通常是一个单独部署的Envoy Gateway。 Envoy中流量转移 新版本上线时,为兼顾到产品的稳定性及用户的接受程度,让新老版本同时在线,将流量按需要分派至不同的版本; 蓝绿发布 A/B测试 金丝雀发布 流量镜像 …. HTTP路由器能够将流量按比例分成两个或多个上游集群中虚拟主机中的路由,从而产生两种常见用例: 版本升级:路由时将流量逐渐从一个集群迁移至另一个集群,实现灰度发布; 通过在路由中定义路由相关流量的百分比进行; A/B测试或多变量测试:同时测试多个相同的服务,路由的流量必须在相同服务的不同版本的集群之间分配;通过在路由中使用基于权重的集群路由完成;另外,匹配条件中,结合指定标头或也能够完成基于内容的流量管理; 流量迁移是指,通过在路由中配置运行时对象选择特定路由以及相应集群的概率的变动,从而实现将虚拟主机中特定路由的流量逐渐从一个集群迁移到另一个集群。 runtime_fraction yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 route: - match: prefix|path|regex: runtime_faction: # 额外匹配指定的运行时键值,每次评估匹配路径时,必须低于此字段指示的百分比,支持渐进式修改。 default_value: # 运行时键值不可用时,则使用此默认值。 numerator: # 指定分子,默认0 denominator: # 指定分母,小于分母时,最终百分比为1, 分母可使用 HUNDRED(默认) TEN_THOUSAND和MILLION, runtime_key: routing....

Envoy健康状态监测

官方文档 healthy_check Envoy的服务发现并未采用完全一致的机制,而是假设主机以最终一致的方式加入或离开网格,它结合主动健康状态检查机制来判定集群的健康状态; 健康与否的决策机制以完全分布式的方式进行,因此可以很好地应对网络分区; 为集群启用主机健康状态检查机制后,Envoy基于如下方式判定是否路由请求到一个主机; 发现失败,单健康检查正常,此时,无法添加新主机,但现有主机将继续正常运行。 Discovery Status Health Check OK Health Check Failed Discovered Route Dont’t Route Absent Route Don’t Route / Delete 故障处理机制 Envoy提供了一系列开箱即用的故障处理机制: 超时(timeout) 有限次数的重试,并支持可变的重试延迟 主动健康检查与异常探测 连接池 断路器 所有这些特性,都可以在运行时动态配置;结合流量管理机制,用户可为每个服务/版本定制所需的故障恢复机制; 健康状态监测 健康状态检测用于确保代理服务器不会将下游客户端的请求代理至工作异常的上游主机; Envoy支持两种类型的健康状态检测,二者均基于集群进行定义: 主动检测(Active Health Checking):Envoy周期性地发送探测报文至上游主机,并根据其响应判断其健康状态;Envoy目前支持三种类型的主动检测: HTTP:向上游主机发送HTTP请求报文 L3/L4:向上游主机发送L3/L4请求报文,基于响应的结果判定其健康状态,或仅通过连接状态进行判定; Redis:向上游的redis服务器发送Redis PING; 被动检测(Passive Health Checking):Envoy通过异常检测(Outlier Detection)机制进行被动模式的健康状态检测; 目前,仅htp router、tcp proxy和redis proxy三个过滤器支持异常值检测; Envoy支持以下类型的异常检测: 连续5XX:意指所有类型的错误,非htp router过滤器生成的错误也会在内部映射为5xx错误代码; 连续网关故障:连续5XX的子集,单纯用于http的502、503或504错误,即网关故障; 连续的本地原因故障:Envoy无法连接到上游主机或与上游主机的通信被反复中断; 成功率:主机的聚合成功率数据阀值; 主动健康状态监测 集群的主机健康状态检测机制需要显式定义,否则,发现的所有上游主机即被视为可用; 定义语法 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 clusters: - name: ....

Envoy基础

服务网格的基本功能 控制服务间通信:熔断、重试、超时、故障注入、负载均衡和故障转移等。 服务发现:通过专用的服务总监发现服务端点。 可观测:指标数据采集、监控、分布式日志记录和分布式追踪。 安全性:TLS/SSL通信和秘钥管理。 身份认证和授权检查:身份认证,以及基于黑白名单或RBAC的访问控制功能。 部署:对容器技术的原生支持,例如Docker和Kubernetes等。 服务间的通信协议:HTTP1.1 HTTP2.0和gRPC等。 健康状态监测:监测上游服务的健康状态。 …. 服务网格的部署模式有两种:主机共享代理和Sidecar容器 主机共享代理 适用于同一主机存在许多容器的场景,并且还可以利用连接池来提高吞吐量。 带一个代理进程故障将终止其所在主机上的整个容器队列,受影响的不仅仅是单个服务。 实现方式中,常见的是允许为Kubernetes之上的 DaemonSet。 Sidecar容器 代理进程注入每个Pod定义以与住容器一同运行。 Sidecar进程应该尽可能轻量且功能完善。 实现方案:Linkerd、Envoy和Conduit。 What IS Enovy Enovy是工作与OSI模型的7层代理 在实现上,数据平面的主流解决方案有Linkerd、Nginx、Envoy、HAProxy和Traefik等,而控制平面的实现主要有Istio、Nelson和SmartStack等几种口Linkerd ●由Buoyant公司于2016年率先创建的开源高性能网络代理程序(数据平面),是业界第一款Service Mesh产品,引领并促进了相关技术的快速发展 ·Linkerd使用Namerd提供控制平面,实现中心化管理和存储路由规则、服务发现配置、支持运行时动态路由等功能 Envoy 核心功能在于数据平面,于2016年由Lyft公司创建并开源,目标是成为通用的数据平面 云原生应用,既可用作前端代理,亦可实现Service Mesh中的服务间通信 Envoy常被用于实现APIGateway(如Ambassador)以及Kubernetes的Ingress Controller(例如gloo等),不过,基于Envoy实现的Service Mesh产品Istio有着更广泛的用户基础 Istio ·相比前两者来说,lstio发布时间稍晚,它于2017年5月方才面世,但却是目前最火热的Service Mesh解决方案,得到了Google、IBM、Lyt及Redhat等公司的大力推广及支持 ·目前仅支持部署在Kubernetes之上,其数据平而由Envoy实现 envoy适用于现代大型面向服务架构的动态组织应用程序的7层代理应用程序,其典型特性: 运行在架构进程之外 支持3/4层过滤器 支持HTTP协议7层过滤器 支持HTTP协议7层高级路由功能 envoy在现代服务体系架构当中的适用位置既可以为一组服务提供代理,作为整个服务统一的api网关来进行接入,同时也可以对每一个微服务单独实现作为代理,此时需要以sidecar的形式运行在应用程序前端。进而与最前端的apigateway组织成所谓的服务网格(Sevice Mesh)。而在每一个Envoy实例内部都要接受请求。这个请求可能是来自互联网或服务网格之外的客户端,称之为南北流量;也可能是来自网格当中的其他服务的请求,称之为东西流量。 在Envoy当中类似于Nginx或者haproxy的功能术语: listeners :面向客户端一侧提供监听并接受客户端请求的组件。类似于nginx的server或haproxy的frontend 。 cluster:面向后端测,将多个被代理的实例分成组,统一进行负载均衡调度的组。 cluster definltions:cluster的归类。 filter chains:过滤器链,可以将多个链以流水线方式依次进行处理。 面向客户端提供服务/监听的套接字,lintener内部包含一到多个filter组成filter chains,称之为过滤器链。过滤器是lintener内部的子组件。envoy支持4层过滤器和7层过滤器。 envoy 术语 主机(Host):能够进行网络通信的实体(如手机,服务器等上的应用程序)。在这个文档中,主机是一个逻辑网络应用程序。一个物理硬件可能有多个主机上运行,只要他们可以独立寻址。 下游(Downstream):下游主机连接到Envoy,发送请求并接收响应。 上游(Upstream):上游主机接收来自Envoy的连接和请求并返回响应。 监听器(Listener):侦听器是可以被下游客户端连接的命名网络位置(例如,端口,unix域套接字等)。Envoy公开一个或多个下游主机连接的侦听器。 filters chains,过滤器链L4/L7 route:完成对客户请求进行分类 群集(Cluster):群集是指Envoy连接到的一组逻辑上相似的上游主机。Envoy通过服务发现发现一个集群的成员。它可以通过主动健康检查来确定集群成员的健康度,从而Envoy通过负载均衡策略将请求路由到相应的集群成员。 网格(Mesh):协调一致以提供一致的网络拓扑的一组主机。在本文档中,“Envoy mesh”是一组Envoy代理,它们构成了由多种不同服务和应用程序平台组成的分布式系统的消息传递基础。...

Envoy管理

envoy内建了一个管理接口,它支持查询和修改操作,甚至有可能暴露私有数据(例如统计数据、集群名称和证书信息等)因此非常有必要精心编排期访问控制机制,以避免非授权访问。 administration interface 属于 bootstrap 配置文件中的==顶级配置字段==使用。 administration interface offical document yaml 1 2 3 4 5 6 7 8 admin: access_log_path: .. # 管理接口的访问日志文件路径,无须记录访问日志使用/dev/null profile_path: ... # cpu_profile的输出路径,默认为/var/log/envoy/envoy.prof; address: socket_address: # 监听的套接字 protocol: .. address: ... prot_value: ... 下面是一个简单的配置示例 yaml 1 2 3 4 admin: access_log_path: /tmp/admin_access.log address: socket_address: { address: 127.0.0.1, port_value: 9901 } admin接口内置了多个 /path ,不同的path可能会分别接受不同的GET或POST请求 GET /help :打印所有可用选项; / : Admin home page /certs : GET 列出在的所有TLS相关的信息; /clusters : upstream cluster status GET,格外支持使用 /clusters?...

Envoy部署

常用的构建方法 https://skyao.io/learning-envoy/ 手动配置构建环境,手动构建Envoy。 使用Envoy提供的预制于Docker中的构建环境进行手动构建二进制Envoy 使用Envoy提供的预制于Docker中的构建环境进行手动构建二进制Envoy,并直接将Envoy程序打包成Docker镜像 提供Bootstrap配置文件,存在使用xDS的动态资源时,还需要基于文件或管理服务器向其提供必须的配置信息 也可使用Envoy的配置生成器生成示例性配置 基于Bootstrap配置文件启动Envoy实例 直接启动二进制Envoy 于Kubernetes平台基于Sidecar的形式运行Envoy,或运行单独的Envoy Pod(Edge Proxy) 启动Envoy 启动Envoy时,需要通过(-c 选项为其指定初始配置文件以提供引导配置(Bootstrap configuration),这也是使用v2APl的必然要求; text 1 envoy -c <path to config>.{json,yaml,pb,pb_text} 扩展名代表了配置信息的组织格式; 引导配置是Envoy配置信息的基点,用于承载Envoy的初始配置,它可能包括静态资源和动态资源的定义 静态资源(static_resources)于启动直接加载 动态资源(dynamic_resources)则需要通过配置的xDS服务获取并生成 通常,Listener 和 Cluster 是Envoy得以运行的基础,而二者的配置可以全部为静态格式,也可以混合使用动态及静态方式提供,或者全部配置为动态; 一个yaml格式纯静态的基础配置框架类似如下所示: yaml 1 2 3 4 5 6 7 8 9 10 11 static_resources: linteners: - name: ... address: {} filter_chains: [] clusters: - name: ... type: ... connect_timeout: {} lb_policy: ... load_assignment: {} Listener 简易静态配置 侦听器主要用于定义Envoy监听的用于接收Down streams请求的套接字、用于处理请求时调用的过滤器链及相关的其它配置属性;目前envoy仅支持tcp的协议 yaml 1 2 3 4 listeners: - name: address: socket_address: { address: ....

Envoy TLS 配置

official front proxy 在一个Services Mash内部中,都会存在一到多个微服务,为了将南北向流量统一引入网格内部管理,通常存在单独运行的envoy实例。 Envoy的listener支持面向下游客户端一侧的TLS会话,并可选地支持验正客户端证书; listener中用到的数字证书可于配置中静态提供,也可借助于SDS动态获取; tls_context 是 listeners 当中某一个 filter_chains 中上线文中的配置,tls_context 配置在哪个 listeners当中就隶属于哪个listeners。 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 listeners: ... filter_chains: - filters: .. tls_context: common_tls_context: {} # 常规证书相关设置; tls_params: {} # TLS协议版本,加密套件等; tls_certifcates: [] # 用到的证书和私钥文件; - certifcate_chain: {} filename: # 证书文件路径; private_key: {} # 私钥; filename: # 私钥文件路径; password: {} # 私钥口令; filename: # 口令文件路径; tls_certifcate_sds_secret_configs: [] # 要基于SDS API获取TLS会话的相关信息时的配置; require_client_certifcate: # 是否验证客户端证书; 例如,下面示例将前面的Ingress示例中的Envoy配置为通过TLS提供服务,并将所有基于http协议的请求重定向至https;...

istio命令

显示配置文件中的差异 istioctl profile diff default demo 显示对应配置的profile istioctl profile dump demo 显示可用的配置 istioctl profile list 安装指定配置的istio istioctl install --set profile=demo 生成配置清单 istioctl manifest generate istioctl验证安装: istioctl manifest generate --set profile=demo |istioctl verify-install - istio的非侵入式流量治理 流量治理是一个非常宽泛的话题,例如: ◎ 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持; ◎ 同一个服务有两个版本在线,将一部分流量切到某个版本上; ◎ 对服务进行保护,例如限制并发连接数、限制请求数、隔离故障服务实例等; ◎ 动态修改服务中的内容,或者模拟一个服务运行故障等。 在Istio中实现这些服务治理功能时无须修改任何应用的代码。较之微服务的SDK方式,Istio以一种更轻便、透明的方式向用户提供了这些功能。用户可以用自己喜欢的任意语言和框架进行开发,专注于自己的业务,完全不用嵌入任何治理逻辑。只要应用运行在Istio的基础设施上,就可以使用这些治理能力。 一句话总结 Istio 流量治理的目标:以基础设施的方式提供给用户非侵入的流量治理能力,用户只需 关注自己的业务逻辑开发,无须关注服务访问管理。 istio服务架构 在istio1.8中,istio的分为 envoy (数据平面) 、istiod (控制平面) 、addons(管理插件) 及 istioctl (命令行工具,用于安装、配置、诊断分析等操作)组成。 Pilot Pilot是Istio控制平面流量管理的核心组件,管理和配置部署在Istio服务网格中的所有Envoy代理实例。 pilot-discovery为envoy sidecar提供服务发现,用于路由及流量的管理。通过kubernetes CRD资源获取网格的配置信息将其转换为xDS接口的标准数据格式后,通过gRPC分发至相关的envoy sidecar Pilot组件包含工作在控制平面中的 pilot-discovery 和工作与数据平面的pilot-agent 与Envoy(istio-proxy) pilot-discovery主要完成如下功能: 从service registry中获取服务信息 从apiserver中获取配置信息。 将服务信息与配置信息适配为xDS接口的标准数据格式,通过xDS api完成配置分发。 pilot-agent 主要完成如下功能...

istio安装

Istio用于提供统一方式来集成微服务的开放平台,管理微服务之间的流量,执行策略和汇总遥测数据。Istio的控制平面在基础集群管理平台(例如Kubernetes)上提供了一个抽象层。 Istio组成: 在Istio1.8中,istio由以下组件组成:istio-component istio服务网格分为数据平面和控制平面 数据平面:数据平面是由一组代理组成 envoy:Sidecar Proxy 每个微服务代理来处理入口/出口业务服务之间的集群中,并从外部服务的服务。代理形成一个*安全的微服务网格,*提供了丰富的功能集合 控制平面:管理与配置代理的流量规则。 istiod:istio的控制平面,提供了服务发现,配置和证书管理,包含如下组件: Pilot :负责运行时配置,(服务发现,智能路由) Citadel:负责证书的颁发与轮替 Galley:负责配置的管理(验证,提取,分发等功能) istio卸载 bookinfo卸载 text 1 kubectl delete -f samples/bookinfo/platform/kube/bookinfo.yaml istio卸载 text 1 istioctl manifest generate|kubectl delete -f - addons text 1 2 3 4 kubectl delete -f samples/addons/prometheus.yaml kubectl delete -f samples/addons/jaeger.yaml kubectl delete -f samples/addons/kiali.yaml kubectl delete -f samples/addons/grafana.yaml

常用加密算法之数字证书与TLS/SSL

数字证书 互联网上任意双方之间实现通信时,证书的目的有两种, 主机证书,主要实现主机与主机之间进程间通信的。 个人证书,主要用作个人通信的,主要用作加密的数据的发送。 主机类证书所拥有的标识主要为主机名,主机证书名称一定要与互联网之上访问名称一致,否则此证书为不可信证书。 对于一个安全的通信,应该有以下特征: 完整性:消息在传输过程中未被篡改 身份验证:确认消息发送者的身份 不可否认:消息的发送者无法否认自己发送了信息 显然,数字签名和消息认证码是不符合要求的,这里就需要数字证书来解决其弊端。 数字证书(digital certificate)又称公开密钥认证 PKC(英语:Public key certificate)。是在互联网通信中,方式数字签名的秘钥被篡改,是用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。 数字证书认证机构 CA (Certificate Authority):是负责发放和管理数字证书的权威机构。 公钥证书的格式标准 X.509是密码学中公钥明证PKC的格式标准,所有的证书都符合ITU-T X.509国际标准。X.509证书的结构是用ASN1 (Abstract Syntax Notation One)进行描述数据结构,并使用ASN.1语法进行编码。 证书规范 X.509指的是ITU和ISO联合制定的(RFC5280)里定义的的 X.509 v3 前使用最广泛的标准为X.509的 v3版本规范 (RFC5280), 一般遵从X.509格式规范的证书,会有以下的内容: 证书组成结构 结构 说明 版本 现行通用版本是 V3, 序号 用来识别每一张证书,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能过20个字节;由CA来维护 主体 拥有此证书的法人或自然人身份或机器,包括: 国家(C,Country) 州/省(S,State)** 地域/城市(L,Location) 组织/单位(O,Organization) 通用名称(CN,Common Name):在TLS应用上,此字段一般是域名 发行者 以数字签名形式签署此证书的数字证书认证机构 有效期(Validity) 此证书的有效开始时间,在此前该证书并未生效;此证书的有效结束时间,在此后该证书作废。 公开密钥用途 指定证书上公钥的用途,例如数字签名、服务器验证、客户端验证等 公开密钥 公开密钥指纹 数字签名 使用信任的CA对内容进行 主体别名 例如一个网站可能会有多个域名(www.jd.com www.360buy.com..) 一个组织可能会有多个网站(*.baidu.com tieba.baidu.com),不同的网域可以一并使用同一张证书,方便实现应用及管理。 互联网上任意双方之间实现通信时,证书的目的有两种, 主机证书,主要实现主机与主机之间进程间通信的。 个人证书,主要用作个人通信的,主要用作加密的数据的发送。 主机类证书所拥有的标识主要为主机名,主机证书名称一定要与互联网之上访问名称一致,否则此证书为不可信证书。 数字证书文件格式 X....

脚本在公网的加密执行

openssl 可以加密解密,当然也可以为文件加密解密 bash 1 sudo openssl des3 -e -k d36b6b41f36c87963676005ddfb931c7 -in /data/init_app.sh -out /data/rpm/init_app 解密 bash 1 curl http://47.244.200.140:8181/init_app|openssl des3 -d -k d36b6b41f36c87963676005ddfb931c7|sudo bash -s jdk8

Powershell阻止确认

要阻止弹出确认提示,需要设置-Confirm为false, text 1 new-VM -Name $hostname -Template $template -VMHost 10.11.31.5 -OSCustomizationspec TestLinux -Confirm:$false 获得当前确认级别 text 1 $ConfirmPreference 查看确认级别($ConfirmPreference)支持的选项,类型为枚举 text 1 [ENUM]::GetNames($ConfirmPreference.GetType()) 设置确认级别 text 1 $ConfirmPreference="None"

named主从部署

text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 // // named....

zimbra安装三方颁发的证书

步骤1:取得SSL凭证 证书需要取的从根证书每一级的证书 步骤2:合成SSL证书 将中级、根证书合成为一个证书 顺序:按照从后到前合成为一个证书 如,三级 ==》二级 ==》 根 合成后的格式如下 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -----BEGIN CERTIFICATE----- 你的crt內容 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- 步骤3:验证你的商业证书 复制生成的所有证书到目录 /opt/zimbra/ssl/zimbra/commercial 下,(合成后的根证书、证书、与秘钥) 切換到 zimbra 用戶 text 1 2 3 4 5 6 7 8 $ zmcertmgr verifycrt comm {{privkey....

zimbra启用SMTP认证

text 1 2 zmprov modifyServer {{ you domain }} zimbraMtaTlsAuthOnly FALSE zmcontrol restart 查看对应配置 text 1 zmprov getServer {{ you domain }} | grep Auth 查看SMTP是否开启成功 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 xxxx ESMTP Postfix ehlo xxxx 250-xxxxx 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN #SMTP认证相关参数 250-AUTH=LOGIN PLAIN #SMTP认证相关参数 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN

使用ldap客户端创建zimbra ldap用户的格式

命令如下 ldif cat << EOF | ldapadd -x -W -H ldap://:389 -D "uid=zimbra,cn=admins,cn=zimbra" dn: uid=jak1,ou=people,dc=mail,dc=xxxxx2021,dc=com zimbraAccountStatus: active displayName: jak1 givenName: jak1 sn: jak1 zimbraMailStatus: enabled objectClass: inetOrgPerson objectClass: zimbraAccount objectClass: amavisAccount zimbraId: e2214a66-3ga2-4241-9223-44f222ce0522 zimbraCreateTimestamp: 20191102062818.876Z zimbraMailHost: mail.xxxx2021.com zimbraMailTransport: lmtp:mail.xxxx2021.com:7025 zimbraMailDeliveryAddress: scott8@mail.xxxx2021.com mail: jak1@mail.xxxx2021.com cn: jak1 uid: jak1 userPassword:: e1NTSEE1MTJ9ZzBzZGlXRlBjbDQxa2xmZ200YXc1ZkJzSGQzVXNBdVBydUlKRnZ LTExYby9HWXBoUkNTMzZYMEx5VnpCZUJPMGJNTCtTV2IwSnhkaHdudTViR0c1bTJabFVhU3R1N1J3 EOF zimbraAccountStatus 为账户设置中的状态 zimbraId 唯一的值 givenName 姓 displayName 显示名字 bash 1 ldapsearch -LLL -w 99tJFkhVfn -H ldap://172.31.110.115:389 -D "uid=zimbra,cn=admins,cn=zimbra"|less

Kubernetes包管理 - Helm

什么是 Helm Helm 是一个用于管理 Kubernetes 应用程序的包管理工具。它允许您定义、安装和升级 Kubernetes 应用程序,以简化应用程序部署和管理的过程。 在 Kubernetes 中,应用程序被打包为一个或多个称为 “Charts” 的 Helm 资源。一个 Chart 是一个预定义的目录结构,包含了用于部署应用程序的 Kubernetes 资源清单模板。Chart 可以包含 Deployment、Service、ConfigMap、Ingress 等 Kubernetes 资源的定义。 使用 Helm,您可以将应用程序打包为一个 Chart,并使用 Helm 客户端来安装和管理 Chart。这使得应用程序的部署过程更加简单、可重复和可扩展。您可以根据需要部署多个实例,轻松地进行升级和回滚操作,并使用 Helm 提供的值覆盖机制来自定义每个实例的配置。 最重要的是,Helm 支持使用 Helm 仓库来共享和发布 Charts。Helm 仓库是一个集中存储 Charts 的地方,供用户从中搜索和安装 Charts。Helm 仓库可以是公共的,也可以是私有的,您可以自己搭建私有仓库来管理自己的 Charts。 Helm 所作的事情 Helm 管理名为 chart 的Kubernetes包的工具。故 Helm 可以做以下的事情: 创建一个新的 chart 将 chart 打包成归档 (tgz) 文件 与存储 chart 的仓库进行交互 在现有的 Kubernetes 集群中安装和卸载 chart 管理与Helm一起安装的 chart 的发布周期 Helm中的术语 chart:类似于rpm包,deb包,包含Kubernetes资源所需要的必要信息。 repo:chart仓库,类似于yum的仓库,chart仓库是一个简单的HTTP服务。 values:提供了自定义信息用来覆盖模板中的默认值。 release :chart安装后的版本记录。 Helm 与 YAML 资源清单比有什么优势? 模板化和参数化: Helm 使用 Go 的模板引擎来创建 Kubernetes 资源清单。这使得您可以在 Chart 中使用模板来定义资源配置的部分内容,例如标签、名称、端口等。同时,Helm 还支持使用参数化的值,允许您根据不同的环境或需求来自定义 Chart 的配置。这样一来,您可以根据需要生成不同的 Kubernetes 资源清单,而无需手动编辑每个清单文件。 可重用性: Helm 提供了一种将应用程序打包为 Chart 的方式,可以将 Chart 存储在 Helm 仓库中进行共享和重用。这样,您可以使用其他人创建的 Charts 来快速部署常见的应用程序,避免从头开始编写和管理 Kubernetes 资源清单。同时,您也可以将自己的应用程序打包为 Chart,方便自己和团队在不同环境中部署和管理。 版本管理和升级: 使用 Helm,您可以对已安装的 Chart 进行版本管理和升级。当应用程序的配置或代码发生变化时,您可以通过升级 Chart 来自动应用这些更改,而无需手动修改和重新部署 Kubernetes 资源清单。Helm 还提供了回滚功能,允许您在升级出现问题时快速回退到之前的版本。 依赖管理: Helm 允许您在 Chart 中定义和管理依赖关系。这意味着您可以在部署应用程序时自动解析和安装它所依赖的其他 Charts。这样,您可以轻松地管理应用程序所需的其他资源,减少手动处理依赖关系的工作。 部署的一致性和标准化: Helm 提供了一种标准的部署方式,使得不同团队或开发者之间可以使用相同的工具和流程来管理应用程序的部署。这样可以确保在不同环境中的一致性,并降低由于不同部署方式导致的错误和配置差异。 可管理的 Charts: Helm Charts 是可管理的,您可以在 Chart 中定义预先配置的模板、默认值、钩子和配置验证。这使得管理应用程序的配置和部署过程更加灵活和可控。 社区支持和生态系统: Helm 是一个活跃的开源项目,拥有庞大的用户社区和丰富的生态系统。这意味着您可以轻松地找到文档、示例、教程和问题解答,并从社区中获取支持和贡献。 可扩展性和插件支持: Helm 提供了插件机制,允许您扩展 Helm 的功能。您可以使用插件来添加自定义的命令、功能和工作流程,以满足特定需求或自动化常见的任务。 可视化界面和用户友好性: Helm 可以与各种第三方工具和平台集成,提供可视化界面和用户友好的操作方式。这使得非技术人员或不熟悉命令行的开发人员也能够方便地部署和管理应用程序。 安装helm Helm 安装主要官方提供了几种安装方式...

ch4 OpenVPN的统一身份认证方案及实现方法

OpenVPN 2.0与更高版本允许OpenVPN服务器从客户端安全地获取用户名和密码,并将该信息用作认证基础。 方法1:通过本地证书密钥认证。 默认不配置,openvpn即使用证书进行身份认证。 (1)编辑主服务器配置文件/etc/openldap/slapd.conf,取消如下行的注释: 方法2:本地文件认证 在使用身份验证时,需要将 auth-user-pass 指令添加到客户端配置文件中,设置后OpenVPN客户端向用户索要用户名/密码,并将其通过安全的TLS通道传递给服务器进行验证。 服务端配置文件需要增加配置指令 auth-user-pass-verify auth-pam.pl via-file 使用脚本插件。auth-pam.pl 在源码包 sample/sample-script 路径下。 text 1 plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login 生产环境下官方推荐使用 openvpn-auth-pam 插件进行验证,相比于 auth-pam.pl,openvpn-auth-pam 插件具有多个优点: openvpn-auth-pam 使用拆分权限执行模型来提高安全性。 C编译的插件比脚本运行速度更快。 OpenVPN可以通过虚拟内存(而不是通过文件或环境)将用户名/密码传递给插件,这对于服务器上的本地安全性更好。 获取openvpn-auth-pam插件 openvpn-auth-pam插件在openvpn代码目录src/plugins/auth-pam 下,运行 make && make install 进行安装,会自动复制到openvpn安装好的 lib/openvpn/plugins 目录下。 开启密码认证 默认情况下, 在服务器上使用 auth-user-pass-verify 或用户名/密码 插件 将启用双重身份验证,要求客户端证书和用户名/密码身份验证都必须成功,才能对客户端进行身份验证。可以选择关闭客户端证书认证。 text 1 2 client-cert-not-required username-as-common-name # 用户名作为通用名称 开启后需要在客户端注释 cert 和 key的配置 方法3:数据库认证 法2:利用的脚本程序(shell,php等)本地文件去读数据库。 法1:用pam_mysql 方法:4:ldap统一用户认证 openvpn-auth-ldap 利用第一个文件认证的思路,去LDAP查询,还可以和本地文件比较。如 ldap认证原理图 配置openvpn服务端通过ldap进行身份验证 配置OpenVPN基 LDAP的身份验证,需要安装用于LDAP身份验证的OpenVPN插件。openvpn-auth-ldap,它通过LDAP为OpenVPN实现身份认证。 CentOS中 openvpn-auth-ldap 插件在EPEL中 ubuntu与Centos都可以通过对应的包管理工具进行插件安装。...