使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战

发布于:2024-09-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

在 Kubernetes 集群中部署微服务在 5G 电信中至关重要。但是,它也带来了重大的安全风险。虽然防火墙规则和代理提供了初始安全性,但 Kubernetes 中的默认通信机制(例如未加密的网络流量和缺乏访问控制)本质上是不安全的。这种不安全性可能会危及敏感数据。因此,在每个微服务 Pod 中实施额外的安全措施不仅仅是一个建议,而是确保集群内安全通信的关键步骤。因此,需要在每个应用程序内进行额外的配置。

Istio 通过有效管理各个 5G 电信微服务 Pod 之间的通信,为这些挑战提供了强大的解决方案。借助其控制平面,Istio 会自动将 sidecar 代理注入各个微服务 pod,从而确保安全高效的通信。

让我们深入研究一下。

什么是 Istio?

Istio 是一个重要的开源服务网格,可与基于微服务的应用程序无缝集成,从而简化监控、管理以及实施性能和安全策略。它可以防止过载,限制未经授权的访问,并保护传输中的数据。其支持系统统一并确保微服务的平稳运行,显著简化其管理并确保轻松满足性能和安全性要求。

什么是 Sidecar 代理?

sidecar 代理是与 Kubernetes 微服务 Pod 一起运行的独立容器。它负责卸载 Istio 中所有应用程序所需的功能。sidecar 代理是 Istio 架构的一个强大组件,可拦截应用程序的传入和传出网络流量。它使电信运营商能够应用策略并利用上述弹性功能,并使运营商能够在与外界的接口点执行高级功能,从而展示 Istio 架构的功能。

建筑

Istio 架构的支柱主要由两个关键组件塑造,每个组件在其功能中都发挥着关键作用:

  1. 数据平面是 Istio 架构的关键部分,由一组代理(使用 Envoy 部署,Envoy 是一种分布式应用程序的开源代理)组成,这些代理作为 sidecar 容器与微服务一起运行。
  2. 控制平面是 Istio 架构中的决定性元素,它管理代理并决定它们的操作。让我们更详细地了解每个组件。它包括以下组件:
  • 试点:管理服务发现和流量。
  • Citadel:管理安全性并实现安全通信。
  • Galley:验证和分发配置资源。
  • Mixer:处理策略实施和遥测收集。
  • Sidecar Injector:自动将 Envoy sidecar 代理注入 Kubernetes pod 以方便集成。

控制平面

为了解释 Istio 架构的工作原理,我们将使用基于上述架构图的示例,使用 Microservice-A 和 Microservice-B 部署的 sidecar 代理确保了无缝高效的通信。 sidecar 代理拦截网络流量,使应用程序能够实施和实施策略、利用弹性功能并启用高级功能。

当微服务 A 向微服务 B 发送请求时,sidecar 代理会识别目的地,转发请求,并检查服务到服务的通信策略,以确定是否应根据安全性、性能和可靠性进行调用。此拦截、转发和检查过程可确保正确处理请求。如果请求通过,Microservice-B 会处理请求,准备响应,并通过网络将其发送回去,网络会被 sidecar 代理拦截并转发到客户端,然后转发到目标应用程序微服务 A。

了解 Istio 服务网格对 Kubernetes 微服务的重要性

Istio 服务网格在 Kubernetes 中是必不可少的。虽然 Kubernetes 管理微服务,但它不处理流量管理、访问策略或遥测数据收集。Istio 无需更改应用程序代码即可提供这些功能,使其成为使用 sidecar 容器管理 Kubernetes 中的微服务的有吸引力的解决方案。它可以在任何分布式环境中运行,为云或本地应用程序提供安全的解决方案。

Istio 支持 Kubernetes 发行版,包括 EKS 等托管服务和自我管理的集群。它还适用于不同的应用程序编排平台和所有微服务应用程序,包括无服务器架构。

Istio 的优势

Istio 为 Kubernetes 和 Istio 兼容平台提供了几个关键优势:

  1. 安全:在微服务之间强制实施强身份验证和授权要求。
  2. 应用性能:在微服务之间高效路由流量并处理重试和故障转移。
  3. 可观察性:从各个微服务收集遥测数据,以便详细了解运行状况和性能。
  4. 故障 排除: 单独监控每个微服务,以识别和解决性能和安全问题。

总体而言,Istio 简化了基于微服务的现代应用程序的管理员管理。

配置 YAML(另一种标记语言)

Service Mesh Control Plane 管理代理以路由流量,为数据平面提供策略和配置,并授权管理员定义和配置各种服务。配置完成后,SMCP 会将必要的信息分发到服务网格的数据平面,从而允许代理动态调整其行为。

电信运营商可以使用以下配置安装和运行 SMCP(服务网格控制平面):

SMCP YAML

YAML

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: full-install
  namespace: istio-system
spec:
  version: v2.1
  techPreview:
      meshConfig:
        defaultConfig:
          concurrency: 8     # Adjust according to the need
  proxy:
    runtime:
      container:
        resources:
          requests:
            cpu: 500m
            memory: 256Mi
          limits:             # Adjust according to the need
            cpu: "1"
            memory: 1Gi
  tracing:
    sampling: 10000 # 0.01% increments. 10000 samples 100% of traces
    type: Jaeger
  gateways:
    ingress: # istio-ingressgateway
      service:
        type: ClusterIP
        ports:
          - name: status-port
            port: 15020
          - name: http2
            port: 80
            targetPort: 8080
          - name: https
            port: 443
            targetPort: 8443
      meshExpansionPorts: []
    egress: # istio-egressgateway
      service:
        type: ClusterIP
        ports:
          - name: status-port
            port: 15020
          - name: http2
            port: 80
            targetPort: 8080
          - name: https
            port: 443
            targetPort: 8443
    additionalIngress:
      some-other-ingress-gateway: {}
    additionalEgress:
      some-other-egress-gateway: {}

  policy:
    type: Istiod
  telemetry:
    type: Istiod

  addons:
    grafana:
      enabled: true
    kiali:
      name: kiali
      enabled: true
      install: # install kiali CR if not available
        dashboard:
          viewOnly: false
          enableGrafana: true
          enableTracing: true
          enablePrometheus: true
    jaeger:
      name: jaeger-production
      install:
        storage:
          type: Elasticsearch
          elasticsearch:
            nodeCount: 3
            redundancyPolicy: SingleRedundancy
            indexCleaner:
              enabled: true
              numberOfDays: 7
              schedule: 55 23 * * *
        ingress:
          enabled: true
  runtime:
    components:
      tracing.jaeger.elasticsearch: # only supports resources and image name
        container:
          resources:
            limits:
              cpu: 1
              memory: 1Gi
            requests:
              cpu: 500m
              memory: 1Gi
      pilot:
        deployment:
          autoScaling:
            enabled: true
            minReplicas: 2
            maxReplicas: 2
            targetCPUUtilizationPercentage: 85
        pod:
          tolerations:
            - key: node.kubernetes.io/unreachable
              operator: Exists
              effect: NoExecute
              tolerationSeconds: 60
          affinity:
            podAntiAffinity:
              requiredDuringScheduling:
                - key: istio
                  topologyKey: kubernetes.io/hostname
                  operator: In
                  values:
                    - pilot
        container:
          resources:
            limits:                # Adjust according to the need
              cpu: "1"
              memory: 1Gi

Service Mesh Member Roll 明确标识了与 Service Mesh 控制平面关联的项目。唯一情况下,卷中登记的项目会受到 control plane 的影响。将项目添加到成员卷会将其链接到特定的 control plane 部署。

电信运营商可以使用以下配置安装和运行 SMMR (Service Mesh Member Roll):

SMMR YAML

YAML

apiVersion: maistra.io/v1
kind: ServiceMeshMemberRoll
metadata:
  name: default
  namespace: istio-system
spec:
  members:
  - <Micro services pods namespace>  #  namespace that needs be istio injected.

安装

1. 安装 SMCP (Service Mesh Control Plane),如下所示。

Service Mesh 控制平面

2. 按如下方式安装 SMMR (Service Mesh Member Roll)。

Service Mesh 成员卷

Istio 简化了 Kubernetes 环境中 5G 电信微服务 Pod 之间的通信,并支持跨不同平台的微服务架构的无缝连接、控制、监控和安全。它支持容器和虚拟机中的工作负载。

借助 Istio,电信 IoT 微服务 Pod 架构的未来看起来很有希望,并且具有更高的效率、安全性和可扩展性。


网站公告

今日签到

点亮在社区的每一天
去签到