From 4ce940cd38880205e1cb0264a3dd7edfccb5bc2b Mon Sep 17 00:00:00 2001 From: Karol Stepniewski Date: Sun, 12 Feb 2017 23:50:04 -0800 Subject: [PATCH] Add custom CA file to openstack cloud provider config In cases where insecure OpenStack endpoint is to be used (e.g., when testing), gophercloud will fail to connect to such endpoints. This patch adds support for custom CA file configuration option, which, when provided, will make gophercloud validate OpenStack endpoint against certificate(s) read from file specified in that option. --- pkg/cloudprovider/providers/openstack/BUILD | 2 ++ pkg/cloudprovider/providers/openstack/openstack.go | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/pkg/cloudprovider/providers/openstack/BUILD b/pkg/cloudprovider/providers/openstack/BUILD index e30be10..d5a3b44 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 9fae560..a3ca87f 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" ) @@ -118,6 +121,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 @@ -205,6 +209,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 != "" { authOptionsExt := trust.AuthOptionsExt{ TrustID: cfg.Global.TrustId,