分享知识、记录点滴

0%

Istio VirtualService 虚拟服务

概念及示例

VirtualService 描述了一个或多个用户可寻址目标到网格内实际工作负载之间的映射 。 虚拟服务让您配置如何在服务网格内将请求路由到服务,这基于 Istio 和平台提供的基本的连通性和服务发现能力。每个虚拟服务包含一组路由规则,Istio 按顺序评估它们,Istio 将每个给定的请求匹配到虚拟服务指定的实际目标地址。您的网格可以有多个虚拟服务,也可以没有,取决于您的使用场景。

虚拟服务在增强 Istio 流量管理的灵活性和有效性方面,发挥着至关重要的作用,通过对客户端请求的目标地址与真实响应请求的目标工作负载进行解耦来实现。虚拟服务同时提供了丰富的方式,为发送至这些工作负载的流量指定不同的路由规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
gateways:
- bookinfo-gateway
- mesh
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v3
阅读全文 »

Istio Ingress Gateway 概述

istio-gateways

Istio 服务网格中的网关

使用网关为网格来管理入站和出站流量,可以让用户指定要进入或离开网格的流量。

网关配置被用于运行在网格内独立 Envoy 代理中,而不是服务工作负载的应用 Sidecar 代理。

Gateway 用于为 HTTP / TCP 流量配置负载均衡器,并不管该负载均衡器将在哪里运行。网格中可以存在任意数量的 Gateway,并且多个不同的 Gateway 实现可以共存。实际上,通过在配置中指定一组工作负载(Pod)标签,可以将 Gateway 配置绑定到特定的工作负载,从而允许用户通过编写简单的 Gateway Controller 来重用现成的网络设备。

Gateway 只用于配置 L4-L6 功能(例如,对外公开的端口,TLS 配置),所有主流的 L7 代理均以统一的方式实现了这些功能。然后,通过在 Gateway 上绑定 VirtualService 的方式,可以使用标准的 Istio 规则来控制进入 Gateway 的 HTTP 和 TCP 流量。

阅读全文 »

Istio 常用端口

端口 协议 使用者 描述
8060 HTTP Citadel GRPC 服务器
8080 HTTP Citadel agent SDS service 监控
9090 HTTP Prometheus Prometheus
9091 HTTP Mixer 策略/遥测
9876 HTTP Citadel, Citadel agent ControlZ 用户界面
9901 GRPC Galley 网格配置协议
15000 TCP Envoy Envoy 管理端口 (commands/diagnostics)
15001 TCP Envoy Envoy 传出
15006 TCP Envoy Envoy 传入
15004 HTTP Mixer, Pilot 策略/遥测 - mTLS
15010 HTTP Pilot Pilot service - XDS pilot - 发现
15011 TCP Pilot Pilot service - mTLS - Proxy - 发现
15014 HTTP Citadel, Citadel agent, Galley, Mixer, Pilot, Sidecar Injector 控制平面监控
15020 HTTP Ingress Gateway Pilot 健康检查
15029 HTTP Kiali Kiali 用户界面
15030 HTTP Prometheus Prometheus 用户界面
15031 HTTP Grafana Grafana 用户界面
15032 HTTP Tracing Tracing 用户界面
15443 TLS Ingress and Egress Gateways SNI
15090 HTTP Mixer Proxy
42422 TCP Mixer 遥测 - Prometheus
阅读全文 »

Istio 架构

Istio 服务网格从逻辑上分为数据平面和控制平面。

  • 数据平面 由一组智能代理(Envoy)组成,被部署为 sidecar。这些代理负责协调和控制微服务之间的所有网络通信。他们还收集和报告所有网格流量的遥测数据。
  • 控制平面 管理并配置代理来进行流量路由。

Istio 核心组件

下图展示了组成每个平面的不同组件:

istio-arch

Istio 中的流量分为数据平面流量和控制平面流量。

  • 数据平面流量是指工作负载的业务逻辑发送和接收的消息
  • 控制平面流量是指在 Istio 组件之间发送的配置和控制消息用来编排网格的行为
  • Istio 中的流量管理特指数据平面流量
阅读全文 »

需求

搭建istio基础环境

安装步骤

在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章

下载istio,然后解压,然后将 istioctl 增加到 path 环境变量中

1
2
3
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.5.1
export PATH=$PWD/bin:$PATH

新建istio-1.5.1.yaml 配置文件、按照官方文档操作安装会出现错误,导致不能正常进行sidecar 自动注入

阅读全文 »

概述

这篇文章用来记录Kubernetes 的基础资料,整体以最新官方文档为准。

因为k8s整体比较偏运维,作为研发可先大致了解其概念及初级使用方式,后面重点学习点会放在service mesh istio 上。因为istio目前的架构依赖k8s相关组件,后面在学习istio 的过程中使用到k8s具体组件后再回过头来针对性的学习。

Kubernetes 集群所需的各种组件

components-of-kubernetes.png

最好把官方相关文档全部都认认真真看一遍,然后跟着操作一遍会强化理解。因为涉及的体系非常庞大,里面使用到的一个组件可能都需要学习很久,不要着急,慢慢来,有计划一个一个的啃下来。术业有专攻、有目标性的学习与突破。道路且长、共勉

阅读全文 »

需求

基于网页查看Kubernetes 用户界面

安装步骤

在控制面板节点部署dashborad

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

放开外网端口映射

如果需要外网访问,需要使用NodePort的方式对外暴露端口,不能使用kubectl proxy的方式,因为该方式只能通过http访问,非本地环境无法正常登录,在这里折腾了好几个小时,主要还是没有一字一句看官方文档。

更改原文件type: ClusterIPtype: NodePort后保存

阅读全文 »

需求

kubeadm 搭建kubernetes集群环境

准备条件

  1. 三台VPS(本文使用阿里云香港 - centos7.7)- 用国内的服务器折腾的好一会儿都被墙了,先不把时间浪费在这,直接上香港的服务器
  2. 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell)

安装步骤

在安装前需要配置国内的镜像源,这里推荐使用阿里云的

1
2
3
4
5
6
7
8
9
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubelet、kubeadm、kubectl

阅读全文 »

搭建k8s环境所需端口清单

控制平面节点端口清单

协议 方向 端口范围 作用 使用者
TCP 入站 6443 Kubernetes API 服务器 所有组件
TCP 入站 2379-2380 etcd server client API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 10251 kube-scheduler kube-scheduler 自身
TCP 入站 10252 kube-controller-manager kube-controller-manager 自身

Node节点端口清单

协议 方向 端口范围 作用 使用者
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 30000-32767 NodePort 服务** 所有组件

参考资料

https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

需求

安装kubernetes - Minikube本地环境

准备条件

  1. 一台VPS(本文使用阿里云香港 - centos7.7)- 用国内的服务器折腾的好一会儿都被墙了,先不把时间浪费在这,直接上香港的服务器
  2. 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell)

安装步骤

在安装前需要配置国内的镜像源

阅读全文 »