Istio 1.4 部署指南
原文链接:Istio 1.4 部署指南
Istio 一直处于快速迭代更新的过程中,它的部署方法也在不断更新,之前我在 1.0 版本中介绍的安装方法,对于最新的 1.4 版本已经不适用了。以后主流的部署方式都是用 istioctl 进行部署,helm 可以渐渐靠边站了~~
在部署 Istio 之前,首先需要确保 Kubernetes 集群(kubernetes 版本建议在 1.13
以上)已部署并配置好本地的 kubectl 客户端。
1. Kubernetes 环境准备
为了快速准备 kubernetes 环境,我们可以使用 sealos 来部署,步骤如下:
前提条件
- 下载kubernetes 离线安装包
- 下载最新版本sealos
- 务必同步服务器时间
- 主机名不可重复
安装 kubernetes 集群
$ sealos init --master 192.168.0.2 \--node 192.168.0.3 \--node 192.168.0.4 \--node 192.168.0.5 \--user root \--passwd your-server-password \--version v1.16.3 \--pkg-url /root/kube1.16.3.tar.gz
检查安装是否正常:
$ kubectl get nodeNAME STATUS ROLES AGE VERSION
sealos01 Ready master 18h v1.16.3
sealos02 Ready <none> 18h v1.16.3
sealos03 Ready <none> 18h v1.16.3
sealos04 Ready <none> 18h v1.16.3
2. 下载 Istio 部署文件
你可以从 GitHub 的 release 页面下载 istio,或者直接通过下面的命令下载:
$ curl -L https://istio.io/downloadIstio | sh -
下载完成后会得到一个 istio-1.4.2
目录,里面包含了:
install/kubernetes
: 针对 Kubernetes 平台的安装文件samples
: 示例应用bin
: istioctl 二进制文件,可以用来手动注入 sidecar proxy
进入 istio-1.4.2
目录。
$ cd istio-1.4.2$ tree -L 1 ./
./
├── bin
├── demo.yaml
├── install
├── LICENSE
├── manifest.yaml
├── README.md
├── samples
└── tools4 directories, 4 files
将 istioctl 拷贝到 /usr/local/bin/
中:
$ cp bin/istioctl /usr/local/bin/
开启 istioctl 的自动补全功能
bash
将 tools
目录中的 istioctl.bash
拷贝到 $HOME 目录中:
$ cp tools/istioctl.bash ~/
在 ~/.bashrc
中添加一行:
source ~/istioctl.bash
应用生效:
$ source ~/.bashrc
zsh
将 tools
目录中的 _istioctl
拷贝到 $HOME 目录中:
$ cp tools/_istioctl ~/
在 ~/.zshrc
中添加一行:
source ~/_istioctl
应用生效:
$ source ~/.zshrc
3. 部署 Istio
istioctl 提供了多种安装配置文件,可以通过下面的命令查看:
$ istioctl profile listIstio configuration profiles:minimalremotesdsdefaultdemo
它们之间的差异如下:
default | demo | minimal | sds | remote | |
---|---|---|---|---|---|
核心组件 | |||||
istio-citadel | X | X | X | X | |
istio-egressgateway | X | ||||
istio-galley | X | X | X | ||
istio-ingressgateway | X | X | X | ||
istio-nodeagent | X | ||||
istio-pilot | X | X | X | X | |
istio-policy | X | X | X | ||
istio-sidecar-injector | X | X | X | X | |
istio-telemetry | X | X | X | ||
附加组件 | |||||
Grafana | X | ||||
istio-tracing | X | ||||
kiali | X | ||||
prometheus | X | X | X |
其中标记 X 表示该安装该组件。
如果只是想快速试用并体验完整的功能,可以直接使用配置文件 demo
来部署。
在正式部署之前,需要先说明两点:
Istio CNI Plugin
当前实现将用户 pod 流量转发到 proxy 的默认方式是使用 privileged 权限的 istio-init
这个 init container 来做的(运行脚本写入 iptables),需要用到 NET_ADMIN
capabilities。对 linux capabilities 不了解的同学可以参考我的 Linux capabilities 系列。
Istio CNI 插件的主要设计目标是消除这个 privileged 权限的 init container,换成利用 Kubernetes CNI 机制来实现相同功能的替代方案。具体的原理就是在 Kubernetes CNI 插件链末尾加上 Istio 的处理逻辑,在创建和销毁 pod 的这些 hook 点来针对 istio 的 pod 做网络配置:写入 iptables,让该 pod 所在的 network namespace 的网络流量转发到 proxy 进程。
详细内容请参考官方文档。
使用 Istio CNI 插件来创建 sidecar iptables 规则肯定是未来的主流方式,不如我们现在就尝试使用这种方法。
Kubernetes 关键插件(Critical Add-On Pods)
众所周知,Kubernetes 的核心组件都运行在 master 节点上,然而还有一些附加组件对整个集群来说也很关键,例如 DNS 和 metrics-server,这些被称为关键插件。一旦关键插件无法正常工作,整个集群就有可能会无法正常工作,所以 Kubernetes 通过优先级(PriorityClass)来保证关键插件的正常调度和运行。要想让某个应用变成 Kubernetes 的关键插件,只需要其 priorityClassName
设为 system-cluster-critical
或 system-node-critical
,其中 system-node-critical
优先级最高。
注意:关键插件只能运行在
kube-system
namespace 中!
详细内容可以参考官方文档。
接下来正式安装 istio,命令如下:
$ istioctl manifest apply --set profile=demo \--set cni.enabled=true --set cni.components.cni.namespace=kube-system \--set values.gateways.istio-ingressgateway.type=ClusterIP
istioctl 支持两种 API:
- IstioControlPlane API
- Helm API
在上述安装命令中,cni 参数使用的是 IstioControlPlane API,而 values.*
使用的是 Helm API。
部署完成后,查看各组件状态:
$ kubectl -n istio-system get podNAME READY STATUS RESTARTS AGE
grafana-6b65874977-8psph 1/1 Running 0 36s
istio-citadel-86dcf4c6b-nklp5 1/1 Running 0 37s
istio-egressgateway-68f754ccdd-m87m8 0/1 Running 0 37s
istio-galley-5fc6d6c45b-znwl9 1/1 Running 0 38s
istio-ingressgateway-6d759478d8-g5zz2 0/1 Running 0 37s
istio-pilot-5c4995d687-vf9c6 0/1 Running 0 37s
istio-policy-57b99968f-ssq28 1/1 Running 1 37s
istio-sidecar-injector-746f7c7bbb-qwc8l 1/1 Running 0 37s
istio-telemetry-854d8556d5-6znwb 1/1 Running 1 36s
istio-tracing-c66d67cd9-gjnkl 1/1 Running 0 38s
kiali-8559969566-jrdpn 1/1 Running 0 36s
prometheus-66c5887c86-vtbwb 1/1 Running 0 39s
$ kubectl -n kube-system get pod -l k8s-app=istio-cni-nodeNAME READY STATUS RESTARTS AGE
istio-cni-node-k8zfb 1/1 Running 0 10m
istio-cni-node-kpwpc 1/1 Running 0 10m
istio-cni-node-nvblg 1/1 Running 0 10m
istio-cni-node-vk6jd 1/1 Running 0 10m
可以看到 cni 插件已经安装成功,查看配置是否已经追加到 CNI 插件链的末尾:
$ cat /etc/cni/net.d/10-calico.conflist{"name": "k8s-pod-network","cniVersion": "0.3.1","plugins": [...{"type": "istio-cni","log_level": "info","kubernetes": {"kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig","cni_bin_dir": "/opt/cni/bin","exclude_namespaces": ["istio-system"]}}]
}
默认情况下除了 istio-system
namespace 之外,istio cni 插件会监视其他所有 namespace 中的 Pod,然而这并不能满足我们的需求,更严谨的做法是让 istio CNI 插件至少忽略 kube-system
、istio-system
这两个 namespace,怎么做呢?
也很简单,还记得之前提到的 IstioControlPlane API 吗?可以直接通过它来覆盖之前的配置,只需要创建一个 IstioControlPlane
CRD 就可以了。例如:
$ cat cni.yamlapiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:cni:enabled: truecomponents:namespace: kube-systemvalues:cni:excludeNamespaces:- istio-system- kube-system- monitoringunvalidatedValues:cni:logLevel: info
$ istioctl manifest apply -f cni.yaml
删除所有的 istio-cni-node Pod:
$ kubectl -n kube-system delete pod -l k8s-app=istio-cni-node
再次查看 CNI 插件链的配置:
$ cat /etc/cni/net.d/10-calico.conflist{"name": "k8s-pod-network","cniVersion": "0.3.1","plugins": [...{"type": "istio-cni","log_level": "info","kubernetes": {"kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig","cni_bin_dir": "/opt/cni/bin","exclude_namespaces": ["istio-system","kube-system","monitoring"]}}]
}
4. 暴露 Dashboard
这个没什么好说的,通过 Ingress Controller 暴露就好了,可以参考我以前写的 Istio 1.0 部署。如果使用 Contour 的可以参考我的另一篇文章:Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量。
这里我再介绍一种新的方式,istioctl
提供了一个子命令来从本地打开各种 Dashboard:
$ istioctl dashboard --helpAccess to Istio web UIsUsage:istioctl dashboard [flags]istioctl dashboard [command]Aliases:dashboard, dash, dAvailable Commands:controlz Open ControlZ web UIenvoy Open Envoy admin web UIgrafana Open Grafana web UIjaeger Open Jaeger web UIkiali Open Kiali web UIprometheus Open Prometheus web UIzipkin Open Zipkin web UI
例如,要想在本地打开 Grafana 页面,只需执行下面的命令:
$ istioctl dashboard grafana
http://localhost:36813
咋一看可能觉得这个功能很鸡肋,我的集群又不是部署在本地,而且这个命令又不能指定监听的 IP,在本地用浏览器根本打不开呀!其实不然,你可以在本地安装 kubectl 和 istioctl 二进制文件,然后通过 kubeconfig 连接到集群,最后再在本地执行上面的命令,就可以打开页面啦,开发人员用来测试是不是很方便?Windows 用户当我没说。。。
5. 暴露 Gateway
为了暴露 Ingress Gateway,我们可以使用 HostNetwork
模式运行,但你会发现无法启动 ingressgateway 的 Pod,因为如果 Pod 设置了 HostNetwork=true
,则 dnsPolicy 就会从 ClusterFirst
被强制转换成 Default
。而 Ingress Gateway 启动过程中需要通过 DNS 域名连接 pilot
等其他组件,所以无法启动。
我们可以通过强制将 dnsPolicy
的值设置为 ClusterFirstWithHostNet
来解决这个问题,详情参考:Kubernetes DNS 高阶指南。
修改后的 ingressgateway deployment 配置文件如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: istio-ingressgatewaynamespace: istio-system...
spec:...template:metadata:...spec:affinity:nodeAffinity:...requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 192.168.0.4 # 假设你想调度到这台主机上...dnsPolicy: ClusterFirstWithHostNethostNetwork: truerestartPolicy: Always...
接下来我们就可以在浏览器中通过 Gateway 的 URL 来访问服务网格中的服务了。后面我会开启一系列实验教程,本文的所有步骤都是为后面做准备,如果想跟着我做后面的实验,请务必做好本文所述的准备工作。
Istio 1.4 部署指南相关推荐
- Cobbler部署指南之Cobbler安装操作系统篇
##################################################### ##如有转载,请务必保留本文链接及版权信息 ##欢迎广大运维同仁一起交流linux/unix ...
- 关键数据保险箱,AD RMS服务器部署指南
关键数据的保险箱,AD RMS服务器部署指南<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...
- 首发福利!全球第一开源ERP Odoo系统架构部署指南 电子书分享
引言 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适用于各种规 ...
- 01-Windows Server 2012 R2 远程桌面服务部署指南
01-Windows Server 2012 R2 远程桌面服务部署指南 作者:马博峰 对于大部分的IT部门来说,服务器虚拟化并不是的IT首要挑战,而是越来越庞大的企业个人办公环境.企业内部的用户都希 ...
- Windows Phone 8 企业应用部署指南(二)
之前WindowsPhone 8企业应用部署指南(一)介绍了如何将企业级应用在企业内部部署发布.其中作为企业内部部署和发布应用的根本前提是获得企业移动代码签名证书.本节介绍从Symantec申请企业移 ...
- MinIO多租户(Multi-tenant)部署指南
MinIO多租户(Multi-tenant)部署指南 单机部署 要在单台机器上托管多个租户,为每个租户运行一个MinIO server,使用不同的HTTPS端口.配置和数据目录. 示例1:单主机,单磁 ...
- Project Server 2003配置部署指南_百度文库
Project Server 2003配置部署指南_百度文库 Project server 2003配置部署指南 - 网管地带 - IT博客
- VMware-vRealize-Log-Insight-8.2.0.0安装部署指南
VMware-vRealize-Log-Insight-8.2.0.0安装部署指南 https://blog.csdn.net/u011775882/article/details/110928142 ...
- VCSA 6.7 U3部署(vCenter Server Appliance(VCSA)6.7 U3部署指南)
vCenter Server Appliance(VCSA)6.7 U3部署指南 http://www.bdnetlab.com/?p=1387 VCSA 6.7 U3版本于2019年10月提供下载, ...
- esxi时区设置 +8_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)
OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装Ope ...
最新文章
- Silverlight – Datagrid,Dataform数据验证和ValidationSummary
- 十二、Redis五大数据类型之四Hash
- JS对数据分页的封装方法
- sqlserver的四种分页方式
- 匿名内部类创建线程的三种方式
- .NET Core实战项目之CMS 第九章 设计篇-白话架构设计
- Web控件TreeView展开无闪烁的两个解决方法
- 笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()
- 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合
- C++_类和对象_封装_属性和行为做为整体_封装案例---C++语言工作笔记036
- 城南云计算中心项目纳入国家储备库
- redis数据类型 - Hash类型
- Shell脚本学习-阶段二
- centos+darwin搭建简单的视频流服务器
- python计算iris数据集的均值_Iris数据集实战
- Java实现MD5加密工具类
- 启动Maven项目 死活报404 配置文件都没问题
- java发送邮件格式_java使用main函数进行邮件发送怎样设置邮件格式
- Mysql中的索引原理
- quartz 参数说明