diff --git a/models/controllers/controllers.go b/models/controllers/controllers.go index 535517bc..2413e0f9 100644 --- a/models/controllers/controllers.go +++ b/models/controllers/controllers.go @@ -49,4 +49,5 @@ type IMesheryController interface { Undeploy() error GetPublicEndpoint() (string, error) GetVersion() (string, error) + GeEndpointForPort(portName string) (string, error) } diff --git a/models/controllers/helpers.go b/models/controllers/helpers.go index 49c8d18f..a1454ce3 100644 --- a/models/controllers/helpers.go +++ b/models/controllers/helpers.go @@ -15,7 +15,7 @@ import ( mesherykube "github.com/layer5io/meshkit/utils/kubernetes" ) -const BrokerPingEndpoint = "8222/connz" +const BrokerPingEndpoint = "/connz" type Connections struct { Connections []connection `json:"connections"` @@ -88,8 +88,8 @@ func applyOperatorHelmChart(chartRepo string, client mesherykube.Client, meshery return nil } -func ConnectivityTest(clientName, externalIP string) bool { - endpoint, err := url.Parse("http://" + externalIP + ":" + BrokerPingEndpoint) +func ConnectivityTest(clientName, hostPort string) bool { + endpoint, err := url.Parse("http://" + hostPort + BrokerPingEndpoint) if err != nil { return false } diff --git a/models/controllers/meshery_broker.go b/models/controllers/meshery_broker.go index a4f10360..262616ad 100644 --- a/models/controllers/meshery_broker.go +++ b/models/controllers/meshery_broker.go @@ -6,6 +6,7 @@ import ( "strings" opClient "github.com/layer5io/meshery-operator/pkg/client" + "github.com/layer5io/meshkit/utils/kubernetes" mesherykube "github.com/layer5io/meshkit/utils/kubernetes" v1 "k8s.io/api/core/v1" kubeerror "k8s.io/apimachinery/pkg/api/errors" @@ -14,6 +15,9 @@ import ( "k8s.io/kubectl/pkg/polymorphichelpers" ) +var ( + brokerMonitoringPortName = "monitor" +) type mesheryBroker struct { name string status MesheryControllerStatus @@ -38,13 +42,14 @@ func (mb *mesheryBroker) GetStatus() MesheryControllerStatus { return Unknown } // TODO: Confirm if the presence of operator is needed to use the operator client sdk - broker, err := operatorClient.CoreV1Alpha1().Brokers("meshery").Get(context.TODO(), "meshery-broker", metav1.GetOptions{}) + _, err = operatorClient.CoreV1Alpha1().Brokers("meshery").Get(context.TODO(), "meshery-broker", metav1.GetOptions{}) if err == nil { - brokerEndpoint := broker.Status.Endpoint.External - hostIP := strings.Split(brokerEndpoint, ":")[0] - if broker.Status.Endpoint.External != "" && ConnectivityTest(MesheryServer, hostIP) { - mb.status = Connected - return mb.status + monitoringEndpoint, err := mb.GeEndpointForPort(brokerMonitoringPortName) + if err == nil { + if ConnectivityTest(MesheryServer, monitoringEndpoint) { + mb.status = Connected + return mb.status + } } mb.status = Deployed return mb.status @@ -117,6 +122,18 @@ func (mb *mesheryBroker) GetVersion() (string, error) { return getImageVersionOfContainer(statefulSet.Spec.Template, "nats"), nil } +func (mb *mesheryBroker) GeEndpointForPort(portName string) (string, error) { + endpoint, err := kubernetes.GetServiceEndpoint(context.TODO(), mb.kclient.KubeClient, &mesherykube.ServiceOptions{ + Name: "meshery-broker", + Namespace: "meshery", + PortSelector: portName, + }) + if err != nil { + return "", err + } + return endpoint.External.String(), nil +} + func getImageVersionOfContainer(container v1.PodTemplateSpec, containerName string) string { var version string for _, container := range container.Spec.Containers { diff --git a/models/controllers/meshery_operator.go b/models/controllers/meshery_operator.go index 750e9326..10ff439c 100644 --- a/models/controllers/meshery_operator.go +++ b/models/controllers/meshery_operator.go @@ -112,3 +112,7 @@ func (mo *mesheryOperator) setStatus(st MesheryControllerStatus) { defer mo.mx.Unlock() mo.status = st } + +func (mo *mesheryOperator) GeEndpointForPort(portName string) (string, error) { + return "", nil +} \ No newline at end of file diff --git a/models/controllers/meshsync.go b/models/controllers/meshsync.go index b661a088..67b99e91 100644 --- a/models/controllers/meshsync.go +++ b/models/controllers/meshsync.go @@ -2,7 +2,6 @@ package controllers import ( "context" - "strings" opClient "github.com/layer5io/meshery-operator/pkg/client" mesherykube "github.com/layer5io/meshkit/utils/kubernetes" @@ -50,12 +49,11 @@ func (ms *meshsync) GetStatus() MesheryControllerStatus { case v1.PodRunning: ms.status = Running broker := NewMesheryBrokerHandler(ms.kclient) - brokerEndpoint, errOfEndpoint := broker.GetPublicEndpoint() - if errOfEndpoint != nil { + brokerEndpoint, err := broker.GeEndpointForPort(brokerMonitoringPortName) + if err != nil { return ms.status } - hostIP := strings.Split(brokerEndpoint, ":")[0] - isConnected := ConnectivityTest(MeshSync, hostIP) + isConnected := ConnectivityTest(MeshSync, brokerEndpoint) if isConnected { ms.status = Connected } @@ -127,3 +125,7 @@ func (ms *meshsync) GetVersion() (string, error) { return meshsyncresource.Spec.Version, nil } + +func (mb *meshsync) GeEndpointForPort(portName string) (string, error) { + return "", nil +} diff --git a/utils/network.go b/utils/network.go index f7d5d784..ba50163c 100644 --- a/utils/network.go +++ b/utils/network.go @@ -18,6 +18,10 @@ type HostPort struct { Port int32 } +func (hp *HostPort) String() string { + return fmt.Sprintf("%s:%d", hp.Address, hp.Port) +} + type MockOptions struct { DesiredEndpoint string }