验证Istio双向TLS认证

    • 验证Istio双向TLS认证配置

    本任务假设已有一个Kubernetes集群:

    • 已根据Istio安装任务安装Istio并支持双向TLS认证。

      注意,要在”“中的第5步选择”enable Istio mutual TLS Authentication feature”。

    以下命令假设服务部署在默认命名空间。使用参数-n yournamespace来指定其他命名空间。

    验证集群级别的CA已在运行:

    1. istio-ca 1 1 1 1 1m

    如果”AVAILABLE”列为1表示Istio CA在运行。

    验证服务安装

      1. kubectl get configmap istio -o yaml -n istio-system | grep authPolicy | head -1

      如果authPolicy: MUTUAL_TLS一行没有被注释(即没有),则表示Istio的双向TLS认证是打开的。

    当使用双向TLS认证运行Istio时,可以在服务的envoy中使用curl来给其他服务发送请求。举个例子,启动示例应用后,可以ssh到productpage服务的envoy容器中,并通过curl发送请求到其他服务。

    有以下几个步骤:

    1. 获取productpage pod名称

      1. NAME READY STATUS RESTARTS AGE

      确认pod是”Running”状态。

    2. ssh到envoy容器

      1. cert-chain.pem key.pem root-cert.pem

      注意,cert-chain.pem是envoy的证书,需要在另一方使用。key.pem是envoy的与cert-chain.pem配对的私钥。root-cert.pem是根证书,用来验证其他方的证书。目前只有一个CA,因此所有envoy都有相同的root-cert.pem。

    3. 发送请求到另一个服务,比如detail:

    服务名称和端口定义参见这里

    注意,Istio使用 作为服务身份,这比使用服务名称(参考这里得到更多信息)更安全。

    因此Istio使用的证书中没有服务名称,而curl需要使用该信息来验证服务身份。结果就是,我们需要使用curl的’-k’选项来阻止curl客户端在服务(比如 productpage)认证中验证服务身份。

    请检查安全命名 ,获取更多关于Istio中客户端如何验证服务器身份的信息。

    • 要学习Istio服务间双向mTLS认证机制之后的设计原理,请看这个博客