在 Kubernetes 集群中部署微服务在 5G 电信中至关重要。但是,它也带来了重大的安全风险。虽然防火墙规则和代理提供了初始安全性,但 Kubernetes 中的默认通信机制(例如未加密的网络流量和缺乏访问控制)本质上是不安全的。这种不安全性可能会危及敏感数据。因此,在每个微服务 Pod 中实施额外的安全措施不仅仅是一个建议,而是确保集群内安全通信的关键步骤。因此,每个应用程序内部都需要进行额外的配置。
Istio 通过有效管理各个 5G 电信微服务 pod 之间的通信,为这些挑战提供了强大的解决方案。通过其控制平面,Istio 会自动将 sidecar 代理注入到各个微服务 pod 中,确保安全高效的通信。
让我们深入了解一下。
什么是 Istio?
Istio 是一个至关重要的开源服务网格,可与基于微服务的应用程序无缝集成,从而简化监控、管理以及执行性能和安全策略。它可以防止过载,限制未经授权的访问,并保护传输中的数据。其支持系统统一并确保了微服务的顺畅运行,大大简化了其管理,并确保毫不费力地满足性能和安全要求。
什么是 Sidecar 代理?
sidecar 代理是一个单独的容器,它与 Kubernetes 微服务 pod 一起运行。它负责卸载 Istio 中所有应用程序所需的功能。sidecar 代理是 Istio 架构的一个强大组件,它拦截应用程序的传入和传出网络流量。它使电信运营商能够应用策略并利用上述弹性特性,并使运营商能够在与外界的接口点执行高级功能,展示了 Istio 架构的能力。
建筑
Istio 架构的骨干很大程度上受到两个关键组件的影响,每个组件在其功能中都起着关键作用:
- 数据平面是 Istio 架构的关键部分,由一组代理(使用 Envoy(分布式应用程序的开源代理)部署),它们作为 sidecar 容器与微服务一起运行。
- 控制平面是 Istio 架构中的决定性元素,它管理代理并指示其操作。让我们更详细地了解每个组件。它包括以下组件:
- 试点:管理服务发现和流量。
- Citadel:管理安全性并启用安全通信。
- 厨房:验证和分发配置资源。
- Mixer:处理策略实施和遥测收集。
- Sidecar Injector:自动将 Envoy sidecar 代理注入 Kubernetes pod 中,以便于集成。
为了解释 Istio 架构的工作原理,我们将使用基于上述架构图的示例,部署了 Microservice-A 和 Microservice-B 的 sidecar 代理确保了无缝和高效的通信。 sidecar 代理拦截网络流量,使应用程序能够实施和执行策略、利用弹性功能并启用高级功能。
当 Microservice-A 向 Microservice-B 发送请求时,sidecar 代理会识别目的地并转发请求,并检查服务到服务的通信策略,根据安全性、性能和可靠性确定调用是否应通过。这种拦截、转发和检查的过程可确保请求得到适当处理。如果请求通过,微服务-B会处理该请求,准备响应,并通过网络将其发送回,该网络被sidecar代理拦截并转发到客户端,然后转发到目标应用程序微服务A。
了解 Istio Service Mesh 对 Kubernetes 微服务的重要性
Istio 服务网格在 Kubernetes 中是必不可少的。虽然 Kubernetes 管理微服务,但它不处理流量管理、访问策略或遥测数据收集。Istio 无需更改应用程序代码即可提供这些功能,使其成为使用 sidecar 容器管理 Kubernetes 中微服务的有吸引力的解决方案。它可以在任何分布式环境中运行,为云或本地应用程序提供安全的解决方案。
Istio 支持 Kubernetes 发行版,包括 EKS 等托管服务和自管理集群。它还适用于不同的应用程序编排平台和所有微服务应用程序,包括无服务器架构。
Istio 的优势
Istio 为 Kubernetes 和 Istio 兼容平台提供了几个关键优势:
- 安全:在微服务之间强制实施强身份验证和授权要求。
- 应用性能:在微服务之间高效路由流量,并处理重试和故障转移。
- 可观察性:从各个微服务收集遥测数据,以便详细了解运行状况和性能。
- 故障 排除: 单独监视每个微服务,以识别和解决性能和安全问题。
总体而言,Istio 简化了基于微服务的现代应用程序管理员的管理。
配置 YAML(另一种标记语言)
Service Mesh Control Plane 管理代理以路由流量,为数据平面提供策略和配置,并授权管理员定义和配置各种服务。配置完成后,SMCP 会将必要的信息分发到服务网格的数据平面,从而允许代理动态调整其行为。
电信运营商可以使用以下配置安装和运行SMCP(Service Mesh Control Plane):
SMCP YAML
YAML的
1
apiVersion: maistra.io/v2
2
kind: ServiceMeshControlPlane
3
metadata:
4
name: full-install
5
namespace: istio-system
6
spec:
7
version: v2.1
8
techPreview:
9
meshConfig:
10
defaultConfig:
11
concurrency: 8 # Adjust according to the need
12
proxy:
13
runtime:
14
container:
15
resources:
16
requests:
17
cpu: 500m
18
memory: 256Mi
19
limits: # Adjust according to the need
20
cpu: "1"
21
memory: 1Gi
22
tracing:
23
sampling: 10000 # 0.01% increments. 10000 samples 100% of traces
24
type: Jaeger
25
gateways:
26
ingress: # istio-ingressgateway
27
service:
28
type: ClusterIP
29
ports:
30
- name: status-port
31
port: 15020
32
- name: http2
33
port: 80
34
targetPort: 8080
35
- name: https
36
port: 443
37
targetPort: 8443
38
meshExpansionPorts: []
39
egress: # istio-egressgateway
40
service:
41
type: ClusterIP
42
ports:
43
- name: status-port
44
port: 15020
45
- name: http2
46
port: 80
47
targetPort: 8080
48
- name: https
49
port: 443
50
targetPort: 8443
51
additionalIngress:
52
some-other-ingress-gateway: {}
53
additionalEgress:
54
some-other-egress-gateway: {}
55
56
policy:
57
type: Istiod
58
telemetry:
59
type: Istiod
60
61
addons:
62
grafana:
63
enabled: true
64
kiali:
65
name: kiali
66
enabled: true
67
install: # install kiali CR if not available
68
dashboard:
69
viewOnly: false
70
enableGrafana: true
71
enableTracing: true
72
enablePrometheus: true
73
jaeger:
74
name: jaeger-production
75
install:
76
storage:
77
type: Elasticsearch
78
elasticsearch:
79
nodeCount: 3
80
redundancyPolicy: SingleRedundancy
81
indexCleaner:
82
enabled: true
83
numberOfDays: 7
84
schedule: 55 23 * * *
85
ingress:
86
enabled: true
87
runtime:
88
components:
89
tracing.jaeger.elasticsearch: # only supports resources and image name
90
container:
91
resources:
92
limits:
93
cpu: 1
94
memory: 1Gi
95
requests:
96
cpu: 500m
97
memory: 1Gi
98
pilot:
99
deployment:
100
autoScaling:
101
enabled: true
102
minReplicas: 2
103
maxReplicas: 2
104
targetCPUUtilizationPercentage: 85
105
pod:
106
tolerations:
107
- key: node.kubernetes.io/unreachable
108
operator: Exists
109
effect: NoExecute
110
tolerationSeconds: 60
111
affinity:
112
podAntiAffinity:
113
requiredDuringScheduling:
114
- key: istio
115
topologyKey: kubernetes.io/hostname
116
operator: In
117
values:
118
- pilot
119
container:
120
resources:
121
limits: # Adjust according to the need
122
cpu: "1"
123
memory: 1Gi
Service Mesh Member Roll 明确标识与 Service Mesh 控制平面关联的项目。唯一地,登记在册上的项目会受到控制平面的影响。将项目添加到成员卷中会将其链接到特定的控制平面部署。
电信运营商可以使用以下配置安装和运行SMMR(Service Mesh Member Roll):
SMMR YAML
YAML的
1
apiVersion: maistra.io/v1
2
kind: ServiceMeshMemberRoll
3
metadata:
4
name: default
5
namespace: istio-system
6
spec:
7
members:
8
- <Micro services pods namespace> # namespace that needs be istio injected.
安装
1. 安装 SMCP(Service Mesh Control Plane),如下所示。
2. 按如下方式安装 SMMR(Service Mesh Member Roll)。
结论
Istio 简化了 Kubernetes 环境中 5G 电信微服务 Pod 之间的通信,并实现了跨不同平台的微服务架构的无缝连接、控制、监控和安全性。它支持容器和虚拟机中的工作负载。