具有相互tls的外部数据库的Istio ServiceEntry,无法连接到数据库服务

时间:2018-11-12 02:13:51

标签: istio

我在 istio-demo-auth.yaml 中使用了 istio 1.0.2版本 ,我在k8s群集之外有一个mssql数据库,我想将其连接到istio注入服务。我尝试使用此Consuming External TCP Services博客,但服务无法连接到外部mssql实例。服务条目如下:

   function edit_cli(){
            date_default_timezone_set('Asia/Dhaka');
            $date = date('Y-m-d',time());

            $cli_id = $this->input->post('client_id');
            $data = array(
                'product_id' => $this->input->post('product_id'),
                'clientName' => $this->input->post('clientName'),
                'companyName' => $this->input->post('companyName'),
                'client_info_doc' => $date,
                'client_info_created_by' => $this->session->userdata('user_id')
                );

            $this->db->where('client_id', $cli_id);
            $this->db->update('tbl_client_info', $data);    

        }

并且服务日志显示“ Prelogin错误:主机mssql-master端口2433读取prelogin响应时出错:Connection reset ClientConnectionId:”,似乎根本没有到达mssql。如何为外部tls服务配置外部集群数据库?

1 个答案:

答案 0 :(得分:0)

正如@SmileSees提到的,已通过为目标mssql实例禁用双向TLS身份验证解决了该问题。由于数据库实例位于Istio网格外部,并且没有为此服务注入sidecar Envoy,因此未建立TLS安全连接。

您可以考虑使用SPIFFE框架来保护异构环境中的服务。

进一步研究的参考链接:

  1. Mutual TLS authentication
  2. Authorization policy
  3. Istio security vs SPIFFE