Envoy的主动健康监测

实验文件 docker-compose 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest environment: - ENVOY_UID=0 - HEALTHY=ok ports: - 80:80 - 443:443 - 82:9901 volumes: - ....

 ·  · 

Envoy V3APi 开启 TLS

方案架构 本次实例与官方Envoy front_proxy Example相似,首先会有一个Envoy单独运行。ingress的工作是给其他地方提供一个入口。来自外部的传入连接请求到这里,前端代理将会决定他们在内部的转发路径。 图源自Envoy官网文档 front_proxy 生成证书 text 1 openssl req -nodes -new -x509 -keyout certs/server.key -out certs/server.crt -days 365 -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=studyenvoy/OU=studyenvoy/CN=*.studyenvoy.cn" envoy配置说明 v3 api中envoy去掉了tls_context的配置,配置tls首先需要熟悉envoy的如下两个术语 Downstream:下游主机连接到 Envoy,发送请求并或获得响应。 Upstream:上游主机获取来自 Envoy 的链接请求和响应。 本次使用的是ingress的代理,需要配置的即为 Downstream v3api中使用的是transport_socket,transport_socket为 listeners 当中某一个 filter_chains 中上线文中的配置。 transport_socket 官方说明为: (config.core.v3.TransportSocket) Optional custom transport socket implementation to use for downstream connections. To setup TLS, set a transport socket with name tls and DownstreamTlsContext in the typed_config. If no transport socket configuration is specified, new connections will be set up with plaintext....

 ·  · 

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: - ....

 ·  · 

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;...

 ·  · 

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: ....

 ·  ·