云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

4.1.2 ensureHelmClient

前面处理完Chart路径寻找和下载任务后,就需要初始化Helm Client来准备与Tiller通信。ensureHelmClient函数就是为了完成这个功能而存在的,该函数接收一个client interface用来暂存Helm Client实例,下面看看具体的实现。


func newClient() helm.Interface {
  options := []helm.Option{helm.Host(settings.TillerHost), helm.ConnectTimeout(settings.TillerConnectionTimeout)}

  if settings.TLSVerify || settings.TLSEnable {
    debug("Host=%q, Key=%q, Cert=%q, CA=%q\n", settings.TLSServerName, settings.TLSKeyFile, settings.TLSCertFile, settings.TLSCaCertFile)
    tlsopts := tlsutil.Options{
      ServerName:         settings.TLSServerName,
      KeyFile:            settings.TLSKeyFile,
      CertFile:           settings.TLSCertFile,
      InsecureSkipVerify: true,
    }
    if settings.TLSVerify {
      tlsopts.CaCertFile = settings.TLSCaCertFile
      tlsopts.InsecureSkipVerify = false
    }
    tlscfg, err := tlsutil.ClientConfig(tlsopts)
    if err != nil {
      fmt.Fprintln(os.Stderr, err)
      os.Exit(2)
    }
    options = append(options, helm.WithTLS(tlscfg))
  }
  return helm.NewClient(options...)
}

通过阅读代码可知,ensureHelmClient函数基本上就是将Helm Client的各个参数传递过去,主要包含是否开启TLS访问,以及开启后证书的信息传递,最后配置一下超时时间等信息,这里其实仅完成了基本信息的配置,真正与Tiller建立连接和访问还得等待后面真正有需求时才会工作。