为 tls 和 MTLS 配置 istio

问题描述

我有一个 Kubernetes 应用程序,并且正在设置 istio sidecar。是否可以使用简单的 TLS 为一部分 API 和其他 API 配置 istio MTLS?

解决方法

正如我在评论中提到的,您应该可以使用 destination rules 来做到这一点,因为您可以使用 tls settings mode 更改特定主机的 mtls。

看看下面来自 documentation 的例子:

例如,以下规则将客户端配置为使用双向 TLS 来连接上游数据库集群。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: db-mtls
spec:
  host: mydbserver.prod.svc.cluster.local
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem

以下规则将客户端配置为在与域匹配 *.foo.com 的外部服务通信时使用 TLS。

v1alpha3v1beta1
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: tls-foo
spec:
  host: "*.foo.com"
  trafficPolicy:
    tls:
      mode: SIMPLE

以下规则将客户端配置为在与评级服务交谈时使用 Istio 双向 TLS。

v1alpha3v1beta1
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings-istio-mtls
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL