fix: kubeconfig server host

Signed-off-by: hongming <talonwan@yunify.com>
This commit is contained in:
hongming
2019-06-28 14:55:55 +08:00
committed by zryfish
parent 4778a8a7d2
commit 2a3e97b709
3 changed files with 30 additions and 7 deletions

View File

@@ -173,7 +173,7 @@ func addWebService(c *restful.Container) error {
Returns(http.StatusOK, ok, models.PodInfo{})) Returns(http.StatusOK, ok, models.PodInfo{}))
webservice.Route(webservice.GET("/users/{user}/kubeconfig"). webservice.Route(webservice.GET("/users/{user}/kubeconfig").
Produces("text/plain"). Produces("text/plain", restful.MIME_JSON).
To(resources.GetKubeconfig). To(resources.GetKubeconfig).
Doc("get users' kubeconfig"). Doc("get users' kubeconfig").
Param(webservice.PathParameter("user", "username")). Param(webservice.PathParameter("user", "username")).

View File

@@ -19,6 +19,7 @@ package resources
import ( import (
"github.com/emicklei/go-restful" "github.com/emicklei/go-restful"
"github.com/golang/glog"
k8serr "k8s.io/apimachinery/pkg/api/errors" k8serr "k8s.io/apimachinery/pkg/api/errors"
"net/http" "net/http"
@@ -34,6 +35,7 @@ func GetKubectl(req *restful.Request, resp *restful.Response) {
kubectlPod, err := kubectl.GetKubectlPod(user) kubectlPod, err := kubectl.GetKubectlPod(user)
if err != nil { if err != nil {
glog.Error(err)
resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err))
return return
} }
@@ -48,14 +50,14 @@ func GetKubeconfig(req *restful.Request, resp *restful.Response) {
kubectlConfig, err := kubeconfig.GetKubeConfig(user) kubectlConfig, err := kubeconfig.GetKubeConfig(user)
if err != nil { if err != nil {
glog.Error(err)
if k8serr.IsNotFound(err) { if k8serr.IsNotFound(err) {
// recreate // recreate
kubeconfig.CreateKubeConfig(user) kubeconfig.CreateKubeConfig(user)
resp.WriteHeaderAndEntity(http.StatusNotFound, errors.Wrap(err)) resp.WriteHeaderAndJson(http.StatusNotFound, errors.Wrap(err), restful.MIME_JSON)
} else { } else {
resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) resp.WriteHeaderAndJson(http.StatusInternalServerError, errors.Wrap(err), restful.MIME_JSON)
} }
return return
} }

View File

@@ -27,6 +27,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/pem" "encoding/pem"
"fmt" "fmt"
"gopkg.in/yaml.v2"
"io/ioutil" "io/ioutil"
"kubesphere.io/kubesphere/pkg/simple/client/k8s" "kubesphere.io/kubesphere/pkg/simple/client/k8s"
"math/big" "math/big"
@@ -34,7 +35,6 @@ import (
"time" "time"
"github.com/golang/glog" "github.com/golang/glog"
"gopkg.in/yaml.v2"
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
@@ -217,7 +217,7 @@ func createKubeConfig(username string) (string, error) {
return "", err return "", err
} }
base64ServerCa := base64.StdEncoding.EncodeToString(serverCa) base64ServerCa := base64.StdEncoding.EncodeToString(serverCa)
tmpClusterInfo := clusterInfo{CertificateAuthorityData: base64ServerCa, Server: k8s.MasterURL} tmpClusterInfo := clusterInfo{CertificateAuthorityData: base64ServerCa, Server: k8s.KubeConfig.Host}
tmpCluster := cluster{Cluster: tmpClusterInfo, Name: clusterName} tmpCluster := cluster{Cluster: tmpClusterInfo, Name: clusterName}
tmpKubeConfig.Clusters = append(tmpKubeConfig.Clusters, tmpCluster) tmpKubeConfig.Clusters = append(tmpKubeConfig.Clusters, tmpCluster)
@@ -276,7 +276,28 @@ func GetKubeConfig(username string) (string, error) {
glog.Errorf("cannot get username %s's kubeConfig, reason: %v", username, err) glog.Errorf("cannot get username %s's kubeConfig, reason: %v", username, err)
return "", err return "", err
} }
return configMap.Data[kubectlConfigKey], nil
str := configMap.Data[kubectlConfigKey]
var kubeConfig kubeConfig
err = yaml.Unmarshal([]byte(str), &kubeConfig)
if err != nil {
glog.Error(err)
return "", err
}
masterURL := k8s.KubeConfig.Host
if host := k8s.MasterURL; host != "" {
masterURL = host
}
for i, cluster := range kubeConfig.Clusters {
cluster.Cluster.Server = masterURL
kubeConfig.Clusters[i] = cluster
}
data, err := yaml.Marshal(kubeConfig)
if err != nil {
glog.Error(err)
return "", err
}
return string(data), nil
} }
func DelKubeConfig(username string) error { func DelKubeConfig(username string) error {