安装
Nomad上的设置尚未经过测试。
在非Kubernetes环境中使用Istio涉及一些关键任务:
- 使用Istio API服务器设置Istio控制平面
- 将Istio sidecar添加到服务的每个实例
- 确保请求通过sidecars进行路由
设置控制平面
Istio控制平面由四个主要服务组成:Pilot,Mixer,Citadel和API服务器。
API服务器
Istio的API服务器(基于Kubernetes的API服务器)提供配置管理和基于角色的访问控制等关键功能。API服务器需要一个etcd集群作为持久存储。请参阅有关设置API服务器的说明。
本地安装
出于概念验证的目的,可以使用以下Docker-compose文件安装简单的单个容器API服务器:
version: '2'
services:
etcd:
image: quay.io/coreos/etcd:latest
networks:
istiomesh:
aliases:
- etcd
ports:
- "4001:4001"
- "2380:2380"
- "2379:2379"
environment:
- SERVICE_IGNORE=1
command: [
"/usr/local/bin/etcd",
"-advertise-client-urls=http://0.0.0.0:2379",
"-listen-client-urls=http://0.0.0.0:2379"
]
istio-apiserver:
image: gcr.io/google_containers/kube-apiserver-amd64:v1.7.3
networks:
istiomesh:
ipv4_address: 172.28.0.13
aliases:
- apiserver
ports:
- "8080:8080"
privileged: true
environment:
- SERVICE_IGNORE=1
command: [
"kube-apiserver", "--etcd-servers", "http://etcd:2379",
"--service-cluster-ip-range", "10.99.0.0/16",
"--insecure-port", "8080",
"-v", "2",
"--insecure-bind-address", "0.0.0.0"
]
复制
其他Istio组件
Istio Pilot,Mixer和Citadel的Debian软件包可通过Istio版本获得。或者,这些组件可以作为Docker容器运行(docker.io/istio/pilot,docker.io/istio/mixer,docker.io/istio/citadel)。请注意,这些组件是无状态的,可以水平缩放。这些组件中的每一个都依赖于Istio API服务器,而后者又依赖于etcd集群来实现持久性。为了实现高可用性,每个控制平面服务可以作为Nomad中的作业运行,其中服务节可以用于描述控制平面服务的期望属性。
将Sidecars添加到服务实例
应用程序中的每个服务实例都必须附带Istio边车。根据您的安装单位(Docker容器,VM,裸机节点),需要在这些组件中安装Istio边车。例如,如果您的基础架构使用VM,则必须在需要成为服务网格一部分的每个VM上运行Istio sidecar进程。
将边车打包到基于Nomad的部署的一种方法是将Istio边车过程添加为任务组中的任务。任务组是一个或多个相关任务的集合,这些任务保证在同一主机上共存。但是,与Kubernetes Pods不同,组中的任务不共享相同的网络命名空间。因此,在使用iptables
规则通过Istio sidecar透明地重新路由所有网络流量时,必须注意确保每个主机只运行一个任务组。如果在Istio中支持非透明代理(应用程序明确与边车交谈),则此限制将不再适用。
通过Istio Sidecar路由流量
边车安装的一部分应该包括设置适当的IP表规则,以通过Istio sidecars透明地路由应用程序的网络流量。可以在此处找到用于设置此类转发的IP表脚本。
必须在启动应用程序或sidecar进程之前执行此脚本。
https://istio.io/docs/setup/consul/install/