diff --git a/pkg/cloudprovider/providers/openstack/BUILD b/pkg/cloudprovider/providers/openstack/BUILD index 623ee9c..8500007 100644 --- a/pkg/cloudprovider/providers/openstack/BUILD +++ b/pkg/cloudprovider/providers/openstack/BUILD @@ -54,6 +54,8 @@ go_library( "//vendor:gopkg.in/gcfg.v1", "//vendor:k8s.io/apimachinery/pkg/api/resource", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/apimachinery/pkg/util/net", + "//vendor:k8s.io/client-go/util/cert", ], ) diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index 572d209..438b7e9 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -17,6 +17,7 @@ limitations under the License. package openstack import ( + "crypto/tls" "errors" "fmt" "io" @@ -37,6 +38,8 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/types" + netutil "k8s.io/apimachinery/pkg/util/net" + certutil "k8s.io/client-go/util/cert" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/cloudprovider" ) @@ -116,6 +119,7 @@ type Config struct { DomainId string `gcfg:"domain-id"` DomainName string `gcfg:"domain-name"` Region string + CAFile string `gcfg:"ca-file"` } LoadBalancer LoadBalancerOpts BlockStorage BlockStorageOpts @@ -214,6 +218,16 @@ func newOpenStack(cfg Config) (*OpenStack, error) { if err != nil { return nil, err } + if cfg.Global.CAFile != "" { + roots, err := certutil.NewPool(cfg.Global.CAFile) + if err != nil { + return nil, err + } + config := &tls.Config{} + config.RootCAs = roots + provider.HTTPClient.Transport = netutil.SetOldTransportDefaults(&http.Transport{TLSClientConfig: config}) + + } if cfg.Global.TrustId != "" { opts := cfg.toAuth3Options() authOptsExt := trusts.AuthOptsExt{