前言
Istio 架构又换了,从 1.5 开始,把控制平面的所有组件组合并成一个单体结构叫 istiod
,对于运维部署来说省去很大麻烦。Mixer
组件被移除,新版本的 HTTP 遥测默认基于 in-proxy Stats filter
,同时可使用 WebAssembly
开发 in-proxy
扩展。
下面展示 Istio 架构图前世
与今生
:
前世
今生
环境要求 [1]
Kubernetes 版本支持
- 按官方话来说,Istio 1.5 已在以下 Kubernetes 发布版本测试过:1.14, 1.15, 1.16。
Kubernetes Pod 和 Service 要求
作为 Istio 服务网格中的一部分,Kubernetes 集群中的 Pod 和 Service 必须满足以下要求:
- 命名的服务端口: Service 的端口必须命名。端口名键值对必须按以下格式:
name: <protocol>[-<suffix>]
。更多说明请参看协议选择。 - Service 关联: 每个 Pod 必须至少属于一个 Kubernetes Service,不管这个 Pod 是否对外暴露端口。如果一个 Pod 同时属于多个 Kubernetes Service, 那么这些 Service 不能同时在一个端口号上使用不同的协议(比如:HTTP 和 TCP)。
- 带有 app 和 version 标签(label) 的 Deployment: 我们建议显式地给 Deployment 加上 app 和 version 标签。给使用 Kubernetes Deployment 部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。
- app 标签:每个部署配置应该有一个不同的 app 标签并且该标签的值应该有一定意义。app label 用于在分布式追踪中添加上下文信息。
- version 标签:这个标签用于在特定方式部署的应用中表示版本。
- 应用 UID: 确保你的 Pod 不会以用户 ID(UID)为 1337 的用户运行应用。
- NET_ADMIN 功能: 如果你的集群执行 Pod 安全策略,必须给 Pod 配置 NET_ADMIN 功能。如果你使用 Istio CNI 插件 可以不配置。要了解更多 NET_ADMIN 功能的知识,请查看所需的 Pod 功能。
下载 Istio 1.15 版本
注意:Linux 操作系统
1.下载 Istio 1.15.1 安装包
1 | $ cd /usr/local/src/ |
2.切换 Istio 包所在目录
1 | $ cd istio-1.5.1 |
安装目录包含如下内容:
- install/kubernetes 目录下,有 Kubernetes 相关的 YAML 安装文件
- samples/ 目录下,有示例应用程序
- bin/ 目录下,包含 istioctl 的客户端文件。istioctl 工具用于手动注入 Envoy sidecar 代理。
3.将 istioctl 命令添加到环境变量中
1 | # 在 ~/.bashrc 中添加一行 |
4.配置 istioctl 参数自动补全
1 | $ vim ~/.bashrc |
部署
istioctl 提供了多种安装配置文件,它们之间差异:
安装配置提要:
default
基础上开启Grafana
、istio-tracing
、kiali
附加组件cni
配置关闭,但相关参数已配置- 全局禁用
TLS
Grafana
、istio-tracing
、kiali
、prometheus
通过istio-ingressgateway
暴露- 排除
192.168.16.0/20,192.168.32.0/20
k8s svc 和 k8s pod 两个网段 Ingress Gateway
与pilot
开启2个pod(默认1个pod)- Pod 绑定节点标签
zone: sz
Ingress Gateway
使用HostNetwork
模式暴露overlays
字段用来修改对应组件的各个资源对象的manifest
- 调整
PDB
配置 - 安装前需要创建
grafana
和kiali
secret,用于登陆 Ingress Gateway
从安全的角度来考虑,不应该暴露那些不必要的端口,对于 Ingress Gateway 来说,只需要暴露 HTTP、HTTPS 和 metrics 端口就够了
配置 grafana
和 kiali
secret
创建 istio-system namespaces1
$ kubectl create ns istio-system
配置 kiali secret1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17$ KIALI_USERNAME=$(echo -n 'admin' | base64)
$ KIALI_PASSPHRASE=$(echo -n 'admin' | base64)
$ NAMESPACE=istio-system
$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kiali
namespace: $NAMESPACE
labels:
app: kiali
type: Opaque
data:
username: $KIALI_USERNAME
passphrase: $KIALI_PASSPHRASE
EOF
配置 grafana secret1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17$ GRAFANA_USERNAME=$(echo -n 'admin' | base64)
$ GRAFANA_PASSPHRASE=$(echo -n 'admin' | base64)
$ NAMESPACE=istio-system
$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: grafana
namespace: $NAMESPACE
labels:
app: grafana
type: Opaque
data:
username: $GRAFANA_USERNAME
passphrase: $GRAFANA_PASSPHRASE
EOF
推荐使用 Operator
方式进行部署,这里使用 default
配置部署(default 也是用于生产环境)
创建 Istio Operator yaml 配置1
$ vim istio-1.5.1.yaml
1 | apiVersion: install.istio.io/v1alpha1 |
部署 Istio1
$ istioctl manifest apply -f istio-1.5.1.yaml
设置 Grafana
、istio-tracing
、kiali
、prometheus
通过 istio-ingressgateway
暴露
1 | $ vim istio-addon-components-gateway.yaml |
1 | apiVersion: networking.istio.io/v1alpha3 |
部署 Grafana
、istio-tracing
、kiali
、prometheus
服务 Gateway 和 VirtualService1
$ kubectl apply -f istio-addon-components-gateway.yaml
部署完成后,查看各组件状态:1
$ kubectl get svc,pod,hpa,pdb,Gateway,VirtualService -n istio-system
参考链接
- [1]https://istio.io/zh/docs/ops/deployment/requirements/
- https://istio.io/docs/setup/install/standalone-operator/
- https://www.danielstechblog.io/high-available-control-plane-with-istio-1-5-on-azure-kubernetes-service/
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2020/03/27/Istio-1-5部署-回归单体/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!