启用双向传输层安全(mTLS)

Alauda Service Mesh 支持通过双向传输层安全(mTLS)协议配置服务间的安全通信,该协议确保服务客户端和服务器之间的相互认证。

目录

关于双向传输层安全(mTLS)

在 Alauda Service Mesh 中,可以使用 Istio 资源配置 mTLS 设置。

STRICT mTLS 模式可以通过 PeerAuthenticationDestinationRule 资源进行配置。

请参考以下 Istio 资源和概念,以正确配置 mTLS 设置:

  • PeerAuthentication
    定义 sidecar 代理接受的 mTLS 模式。

    • PERMISSIVE:接受明文和 mTLS 流量。
    • STRICT:仅接受 mTLS 流量。
  • DestinationRule
    定义 sidecar 代理发送流量时使用的 TLS 模式。

    • DISABLE:发送明文流量。
    • SIMPLEMUTUALISTIO_MUTUAL:使用 TLS 发送流量。
  • 自动 mTLS
    自动为网格间通信启用 mTLS,无论 PeerAuthentication 模式如何。该功能由网格配置中的 enableAutoMtls 字段控制,默认启用。
    自动 mTLS 在代理级别运行,无需修改应用代码。

默认情况下,PeerAuthentication 设置为 PERMISSIVE 模式,允许 Service Mesh 中的 sidecar 接受明文和 mTLS 加密流量。

通过命名空间启用严格 mTLS 模式

您可以通过应用 PeerAuthentication 策略,强制特定命名空间内所有工作负载使用严格 mTLS 模式。

命名空间的 PeerAuthentication 策略示例

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: <namespace>
spec:
  mtls:
    mode: STRICT
  1. 应用 STRICT mTLS 模式的 <namespace>

auto mTLS 禁用PeerAuthentication 设置为 STRICT 模式时,您可以通过创建 DestinationRule 资源并设置为 MUTUALISTIO_MUTUAL 模式,为 <namespace> 中的所有目标主机启用 mTLS。

命名空间的 DestinationRule 策略示例

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: enable-mtls
  namespace: <namespace>
spec:
  host: "*.<namespace>.svc.cluster.local"
  trafficPolicy:
   tls:
    mode: ISTIO_MUTUAL

在整个服务网格中启用严格 mTLS

您可以通过在控制平面命名空间(例如 istio-system)中应用 PeerAuthentication 策略,实现全集群范围内的严格 mTLS。该命名空间必须与 Istio 资源中的 spec.namespace 字段值匹配。

全网格的 PeerAuthentication 策略示例

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: istio-system
spec:
  mtls:
    mode: STRICT

此外,需创建 DestinationRule 资源以禁用与 API 服务器的 mTLS 通信,因为 API 服务器没有 sidecar。对其他无 sidecar 的服务也应应用类似的 DestinationRule 配置。

全网格的 DestinationRule 策略示例

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: api-server
  namespace: istio-system
spec:
  host: kubernetes.default.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE

使用 Kiali 验证加密状态

Kiali 控制台提供多种方式验证您的应用、服务和工作负载是否启用了 mTLS 加密。

  • 进入 Services Detail Overview 页面。
  • 在图表边缘显示锁形图标,表示 mTLS 已启用。
  • 在 UI 的 Network 部分,启用 mTLS 的端口也会标记锁形图标。