如何在OpenShift 4.x上安装Istio Service Mesh
服务网格提供了一种统一的方式来连接,保护和监视OpenShift/Kubernetes容器环境中的微服务应用程序。
网格可以描述为组成分布式微服务体系结构中的应用程序的微服务网络。
本教程将引导我们完成在OpenShift 4.x群集上安装Istio Service Mesh的步骤。
红帽OpenShift服务网格基于开源Istio项目。
它使创建已部署服务的网络变得容易,该网络提供发现,负载平衡,服务到服务的身份验证,故障恢复,指标和监视。
Istio服务网格的功能
流量管理–在服务之间控制流量和API调用的流,使调用更可靠,并在不利条件下使网络更健壮。
服务身份和安全性–在网状网络中为服务提供可验证的身份并提供能力策略执行–将组织策略应用于服务之间的交互,确保执行访问策略,并在消费者之间公平分配资源。
通过配置网格而不是通过更改应用程序代码来进行策略更改。
遥测–了解服务之间的依赖关系以及服务之间的流量性质和流向,从而能够快速识别问题。
Istio服务网格的组件
Istio服务网格分为控制平面和数据平面。
控制平面组件:飞行员–在运行时配置Envoy Sidecar代理。
混合器–实施访问控制和使用策略。
它还负责从Envoy代理和其他服务收集遥测数据。
城堡–用于证书管理–颁发和轮换。
Galley –提取服务网格配置,然后验证,处理和分发配置。
数据平面:数据平面由一组部署为边车的智能代理(Envoy)组成。
这些代理介导并控制微服务之间的所有网络通信。
他们还收集并报告所有网状网络流量的遥测.Envoy内置功能包括:动态服务发现负载平衡TLS终止HTTP/2和gRPC代理电路断路器运行状况检查具有基于%的流量拆分的分阶段推出故障注入故障丰富的指标红帽OpenShift Service Mesh还提供更复杂的操作功能,包括:A/B测试金丝雀释放速率限制访问控制端到端身份验证
在OpenShift 4.x上安装Istio Service Mesh
现在,按照以下几个步骤安装和配置基于Istio的Red Hat OpenShift Service Mesh。
istio-operator将用于管理Istio控制平面的安装。
步骤1:安装Elasticsearch Operator
Elasticsearch运算符使我们可以配置和管理Elasticsearch集群以使用Jaeger进行跟踪和登录。
登录OpenShift Container Platform Web控制台并导航到Operators> OperatorHub> Search Elasticsearch Operator
点击"安装"。
选择群集上的所有名称空间(默认)以获取安装模式和自动批准策略。
单击订阅以启动安装。
步骤2:安装Jaeger Operator
Jaeger可让我们执行跟踪以监视复杂的分布式系统中的事务并对其进行故障排除。
导航到"操作员">" OperatorHub">"搜索Jaeger操作员"
单击"继续"以选择以下其他设置进行订阅。
步骤3:安装Kiali Operator
Kiali使我们可以在单个控制台中查看配置,监视流量以及查看和分析跟踪。
要安装它,请在OperatorHub上搜索" Kiali Operator"。
选择安装方式,更新渠道和批准策略。
现在应该安装所有三个操作员。
步骤4:安装Red Hat OpenShift Service Mesh Operator
安装Jaeger,Kiali和Elasticsearch运算符后,继续安装Red Hat提供的Istio Service Mesh Operator。
导航到Operators> OperatorHub> Red Hat OpenShift Service Mesh
选择集群上的所有名称空间(默认)以在openshift-operators项目中安装Service Mesh Operator。
单击"安装并使用自动批准策略稳定更新通道"。
操作员应该在 openshift-operators
项目。
步骤5:配置服务网格控制平面
现在我们可以部署Service Mesh控制平面,该平面定义了用于控制平面安装的配置。
创建一个新项目:Home> Projects> Create Project
将项目命名为istio-systemCreation of project自动在OpenShift中切换到新项目。
导航到操作员>已安装的操作员> Istio服务网格控制平面
单击创建ServiceMeshControlPlane。
默认的ServiceMeshControlPlane模板以YAML格式提供。
修改它们以适合用例。
有关更多详细信息,请参阅《定制教程》。
我对配置进行了定制,如下所示。
注意:请不要复制粘贴此配置–它允许在带有污点的基础节点上运行Istio服务。
它可能对我们不起作用!
apiVersion: maistra.io/v1 kind: ServiceMeshControlPlane metadata: name: full-install namespace: istio-system spec: istio: global: proxy: accessLogFile: "/dev/stdout" mtls: enabled: false disablePolicyChecks: true policyCheckFailOpen: false outboundTrafficPolicy: mode: "REGISTRY_ONLY" gateways: istio-ingressgateway: autoscaleEnabled: true ior_enabled: true istio-egressgateway: autoscaleEnabled: true nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - key: infra value: reserved effect: NoSchedule - key: infra value: reserved effect: NoExecute mixer: enabled: true nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - key: infra value: reserved effect: NoSchedule - key: infra value: reserved effect: NoExecute kiali: enabled: true dashboard: viewOnlyMode: false ingress: enabled: true nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - key: infra value: reserved effect: NoSchedule - key: infra value: reserved effect: NoExecute grafana: enabled: true nodeSelector: node-role.kubernetes.io/infra: "" tolerations: - key: infra value: reserved effect: NoSchedule - key: infra value: reserved effect: NoExecute tracing: enabled: true jaeger: template: all-in-one
单击"创建",控制平面应开始安装。
我们可以从CLI检查控制平面安装的状态
$oc get smcp -n istio-system
我们可以在Pod创建时观看其进度。
$oc get pods -n istio-system -w
步骤6:配置服务网格成员卷
ServiceMeshMemberRoll中列出了属于控制平面的项目。
我们需要在istio-system项目中创建一个名为default的ServiceMeshMemberRoll资源。
切换到istio-system项目:主页>项目> istio-system导航到Operators> Installed Operators> Red Hat OpenShift Service Mesh> Istio Service Mesh Member Roll
在ServiceMeshMemberRolls下,单击"创建ServiceMeshMemberRoll"。
添加我们想成为Istio服务网格的一部分的项目,然后单击"创建"。
通过CLI,可以在创建后更新ServiceMeshMemberRoll资源。
$oc edit smmr -n istio-system
步骤7:使用自动Sidecar注入部署应用程序
要将应用程序部署到Service Mesh中,我们必须通过指定 sidecar.istio.io/inject
值为的注释 "true"
请参阅下面的示例。
apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 template: metadata: annotations: sidecar.istio.io/inject: "true" labels: app: sleep spec: containers: - name: sleep image: tutum/curl command: ["/bin/sleep","infinity"] imagePullPolicy: IfNotPresent
对于项目中作为成员添加到控制平面的现有应用程序,我们可以通过添加或者修改注释来更新部署中的pod模板:
$oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'