安全常见问题
安装 Istio 后如何启用/禁用双向 TLS?
是否可以在同一个集群中,为某些服务启用双向 TLS,而为其他服务禁用双向 TLS?
认证策略可以是网格范围(影响网格中的所有服务)、命名空间范围(同一命名空间中的所有服务)或服务特定。您可以创建策略或多个策略,以根据需要在集群中为服务设置双向 TLS。
如何验证流量是否使用双向 TLS 加密?
如果您使用values.global.proxy.privileged=true
安装了 Istio,则可以使用tcpdump
确定加密状态。此外,在 Kubernetes 1.23 及更高版本中,作为替代安装 Istio 为特权用户的方式,您可以使用kubectl debug
在临时容器中运行tcpdump
。有关说明,请参阅Istio 双向 TLS 迁移。
如果全局启用了双向 TLS,非 Istio 服务能否访问 Istio 服务?
启用STRICT
双向 TLS 时,非 Istio 工作负载无法与 Istio 服务通信,因为它们将没有有效的 Istio 客户端证书。
如果需要允许这些客户端,可以将双向 TLS 模式配置为PERMISSIVE
,允许明文和双向 TLS。这可以针对单个工作负载或整个网格执行。
有关更多详细信息,请参阅认证策略。
在启用双向 TLS 时,如何使用 Kubernetes 存活性探针和就绪性探针进行 Pod 健康检查?
如果启用了双向 TLS,则来自 kubelet 的 HTTP 和 TCP 健康检查将无法正常工作,除非进行修改,因为 kubelet 没有 Istio 发行的证书。
有几个选项
使用探针重写将存活性探针和就绪性探针请求直接重定向到工作负载。有关更多信息,请参阅探针重写。默认情况下启用此功能,并且建议使用。
为健康检查使用单独的端口,并在常规服务端口上仅启用双向 TLS。有关更多信息,请参阅Istio 服务的健康检查。
为工作负载使用
PERMISSIVE
模式,以便它可以接受明文和双向 TLS 流量。请记住,使用此选项不会强制执行双向 TLS。
如何配置 Istio 证书的生命周期?
对于在 Kubernetes 中运行的工作负载,其 Istio 证书的生命周期默认为 24 小时。
可以通过自定义代理配置的proxyMetadata
字段来覆盖此配置。例如
proxyMetadata:
SECRET_TTL: 48h
自动双向 TLS 是否会排除使用“excludeInboundPorts”注释设置的端口?
不会。当在服务器工作负载上使用traffic.sidecar.istio.io/excludeInboundPorts
时,Istio 仍然会配置客户端 Envoy 默认发送双向 TLS。要更改此设置,您需要配置目标规则并将双向 TLS 模式设置为DISABLE
,以便客户端向这些端口发送明文。
MySQL 连接故障排除
您可能会发现安装 Istio 后 MySQL 无法连接。这是因为 MySQL 是一种服务器优先协议,这可能会干扰 Istio 的协议检测。特别是,使用PERMISSIVE
mTLS 模式可能会导致问题。您可能会看到类似以下的错误消息:ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
。
可以通过确保使用STRICT
或DISABLE
模式,或所有客户端都配置为发送 mTLS 来解决此问题。有关更多信息,请参阅服务器优先协议。
Istio 是否支持授权?
是的。Istio 为网格中的 HTTP 和纯 TCP 服务提供授权功能。了解更多。
如何配置 Istio Ingress 以仅接受 TLS 流量?
通过遵循安全 Ingress 流量任务中的说明,可以将 Istio Ingress 保护起来,使其仅接受 TLS 流量。
是否可以为 HTTPS 服务安装 Istio sidecar?
是的,可以。无论是否启用双向 TLS,它都可以正常工作。