diff --git a/pkg/kapis/cluster/v1alpha1/handler.go b/pkg/kapis/cluster/v1alpha1/handler.go index e6f654597..4c23a726e 100644 --- a/pkg/kapis/cluster/v1alpha1/handler.go +++ b/pkg/kapis/cluster/v1alpha1/handler.go @@ -61,7 +61,10 @@ func NewHandler(serviceLister v1.ServiceLister, clusterLister clusterlister.Clus } } -func (h *handler) GenerateAgentDeployment(request *restful.Request, response *restful.Response) { +// generateAgentDeployment will return a deployment yaml for proxy connection type cluster +// ProxyPublishAddress takes high precedence over proxyPublishService, use proxyPublishService ingress +// address only when proxyPublishAddress is not provided. +func (h *handler) generateAgentDeployment(request *restful.Request, response *restful.Response) { clusterName := request.PathParameter("cluster") cluster, err := h.clusterLister.Get(clusterName) @@ -113,7 +116,7 @@ func (h *handler) populateProxyAddress() error { service, err := h.serviceLister.Services(namespace).Get(parts[0]) if err != nil { - return err + return fmt.Errorf("service %s not found in namespace %s", parts[0], namespace) } if len(service.Spec.Ports) == 0 { @@ -184,9 +187,10 @@ func (h *handler) generateDefaultDeployment(cluster *v1alpha1.Cluster, w io.Writ fmt.Sprintf("--name=%s", cluster.Name), fmt.Sprintf("--token=%s", cluster.Spec.Connection.Token), fmt.Sprintf("--proxy-server=%s", h.proxyAddress), - fmt.Sprintf("--keepalive=30s"), + fmt.Sprintf("--keepalive=10s"), fmt.Sprintf("--kubesphere-service=ks-apiserver.kubesphere-system.svc:80"), fmt.Sprintf("--kubernetes-service=kubernetes.default.svc:443"), + fmt.Sprintf("--v=0"), }, Image: h.agentImage, Resources: corev1.ResourceRequirements{ @@ -221,12 +225,12 @@ func (h *handler) ValidateCluster(request *restful.Request, response *restful.Re } if cluster.Spec.Connection.Type != v1alpha1.ConnectionTypeDirect { - api.HandleBadRequest(response, request, fmt.Errorf("cluster connection type is not direct")) + api.HandleBadRequest(response, request, fmt.Errorf("cluster connection type MUST be direct")) return } - if len(cluster.Spec.Connection.KubeConfig) == 0 || len(cluster.Spec.Connection.KubeSphereAPIEndpoint) == 0 { - api.HandleBadRequest(response, request, fmt.Errorf("cluster kubeconfig and kubesphere endpoint should not be empty")) + if len(cluster.Spec.Connection.KubeConfig) == 0 { + api.HandleBadRequest(response, request, fmt.Errorf("cluster kubeconfig MUST NOT be empty")) return } @@ -236,13 +240,6 @@ func (h *handler) ValidateCluster(request *restful.Request, response *restful.Re return } - // kubesphere apiserver endpoint not provided, that's allowed - // Cluster dispatcher will use kube-apiserver proxy instead - if len(cluster.Spec.Connection.KubeSphereAPIEndpoint) == 0 { - response.WriteHeader(http.StatusOK) - return - } - _, err = validateKubeSphereAPIServer(cluster.Spec.Connection.KubeSphereAPIEndpoint, cluster.Spec.Connection.KubeConfig) if err != nil { api.HandleBadRequest(response, request, fmt.Errorf("unable validate kubesphere endpoint, %v", err)) @@ -286,7 +283,7 @@ func loadKubeConfigFromBytes(kubeconfig []byte) (*rest.Config, error) { } // validateKubeSphereAPIServer uses version api to check the accessibility -// If ksEndpoint is empty, use +// If kubesphere apiserver endpoint is not provided, use kube-apiserver proxy instead func validateKubeSphereAPIServer(ksEndpoint string, kubeconfig []byte) (*version.Info, error) { if len(ksEndpoint) == 0 && len(kubeconfig) == 0 { return nil, fmt.Errorf("neither kubesphere api endpoint nor kubeconfig was provided") diff --git a/pkg/kapis/cluster/v1alpha1/handler_test.go b/pkg/kapis/cluster/v1alpha1/handler_test.go index 81545fd18..fcdc29b26 100644 --- a/pkg/kapis/cluster/v1alpha1/handler_test.go +++ b/pkg/kapis/cluster/v1alpha1/handler_test.go @@ -89,9 +89,10 @@ spec: - --name=gondor - --token=randomtoken - --proxy-server=http://139.198.121.121:8080 - - --keepalive=30s + - --keepalive=10s - --kubesphere-service=ks-apiserver.kubesphere-system.svc:80 - --kubernetes-service=kubernetes.default.svc:443 + - --v=0 image: kubesphere/tower:v1.0 name: agent resources: diff --git a/pkg/kapis/cluster/v1alpha1/register.go b/pkg/kapis/cluster/v1alpha1/register.go index 05e785b25..3176f7ba9 100644 --- a/pkg/kapis/cluster/v1alpha1/register.go +++ b/pkg/kapis/cluster/v1alpha1/register.go @@ -30,7 +30,7 @@ func AddToContainer(container *restful.Container, webservice.Route(webservice.GET("/clusters/{cluster}/agent/deployment"). Doc("Return deployment yaml for cluster agent."). Param(webservice.PathParameter("cluster", "Name of the cluster.").Required(true)). - To(h.GenerateAgentDeployment). + To(h.generateAgentDeployment). Returns(http.StatusOK, api.StatusOK, nil)) webservice.Route(webservice.POST("/clusters/validation").