2
0
Mohammed Nafees 3 жил өмнө
parent
commit
96e4650814

+ 11 - 7
api/server/handlers/namespace/get_ingress.go

@@ -33,10 +33,11 @@ func NewGetIngressHandler(
 
 func (c *GetIngressHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamIngressName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 
+	agent, err := c.GetAgent(r, cluster, "")
+
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
@@ -58,17 +59,20 @@ func (c *GetIngressHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 
 	ingress3, err := agent.GetNetworkingV1Ingress(namespace, name)
 
-	if targetErr := kubernetes.IsNotFoundError; errors.Is(err, targetErr) {
-		c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(
-			fmt.Errorf("ingress %s/%s was not found", namespace, name),
-			http.StatusNotFound,
-		))
+	if err == nil && ingress3 != nil {
+		c.WriteResult(w, r, ingress3)
+		return
+	}
+
+	ingress4, err := agent.GetIstioIngress(namespace, name)
 
+	if errors.Is(err, kubernetes.IsNotFoundError) {
+		c.HandleAPIError(w, r, apierrors.NewErrNotFound(fmt.Errorf("ingress %s/%s was not found", namespace, name)))
 		return
 	} else if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
 	}
 
-	c.WriteResult(w, r, ingress3)
+	c.WriteResult(w, r, ingress4)
 }

+ 9 - 0
dashboard/src/main/home/cluster-dashboard/expanded-chart/ExpandedChart.tsx

@@ -851,6 +851,15 @@ const ExpandedChart: React.FC<Props> = (props) => {
           );
           return;
         }
+
+        if (
+          res.data?.spec?.servers &&
+          res.data?.spec?.servers[0]?.hosts &&
+          res.data?.spec?.servers[0]?.hosts[0]
+        ) {
+          setUrl(`http://${res.data?.spec?.servers[0]?.hosts[0]}`);
+          return;
+        }
       })
       .catch(console.log);
     return () => (isSubscribed = false);

+ 2 - 0
go.mod

@@ -126,6 +126,8 @@ require (
 	github.com/xanzy/go-gitlab v0.68.0 // indirect
 	github.com/yashtewari/glob-intersection v0.1.0 // indirect
 	go.uber.org/goleak v1.1.12 // indirect
+	istio.io/api v0.0.0-20221109202042-b9e5d446a83d // indirect
+	istio.io/client-go v1.16.0 // indirect
 )
 
 require (

+ 4 - 0
go.sum

@@ -3039,6 +3039,10 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY=
 howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
+istio.io/api v0.0.0-20221109202042-b9e5d446a83d h1:ufITkou8JPq7AtpCgJujuvQrBhIse+sRtD9+coG7BjI=
+istio.io/api v0.0.0-20221109202042-b9e5d446a83d/go.mod h1:hQkF0Q19MCmfOTre/Sg4KvrwwETq45oaFplnBm2p4j8=
+istio.io/client-go v1.16.0 h1:wIHRK9x1GbPm4AOeEMhHlpJL7uhNPhtVgzaxIGrIRGU=
+istio.io/client-go v1.16.0/go.mod h1:UV8SFeM2qNime5sobkr2m8oTCPxxVt9xCY4ol50U9YQ=
 k8s.io/api v0.16.8/go.mod h1:a8EOdYHO8en+YHhPBLiW5q+3RfHTr7wxTqqp7emJ7PM=
 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
 k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=

+ 43 - 3
internal/kubernetes/agent.go

@@ -23,8 +23,6 @@ import (
 	"github.com/porter-dev/porter/internal/repository"
 	"golang.org/x/oauth2"
 
-	errors2 "errors"
-
 	"github.com/porter-dev/porter/internal/helm/grapher"
 	appsv1 "k8s.io/api/apps/v1"
 	batchv1 "k8s.io/api/batch/v1"
@@ -49,6 +47,9 @@ import (
 	"k8s.io/kubectl/pkg/scheme"
 
 	rspb "helm.sh/helm/v3/pkg/release"
+
+	istiov1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1"
+	versionedclient "istio.io/client-go/pkg/clientset/versioned"
 )
 
 // Agent is a Kubernetes agent for performing operations that interact with the
@@ -949,6 +950,45 @@ func (a *Agent) GetNetworkingV1Beta1Ingress(namespace string, name string) (*net
 	return resp, nil
 }
 
+func (a *Agent) GetIstioIngress(namespace, name string) (*istiov1beta1.Gateway, error) {
+	restConf, err := a.RESTClientGetter.ToRESTConfig()
+
+	if err != nil {
+		return nil, err
+	}
+
+	clientset, err := versionedclient.NewForConfig(restConf)
+
+	if err != nil {
+		return nil, err
+	}
+
+	gateway, err := clientset.NetworkingV1beta1().Gateways(namespace).List(
+		context.Background(), metav1.ListOptions{},
+	)
+
+	if err != nil {
+		return nil, err
+	}
+
+	var istioGateways []*istiov1beta1.Gateway
+
+	for _, g := range gateway.Items {
+		for k, v := range g.Annotations {
+			if k == "meta.helm.sh/release-name" && v == name {
+				istioGateways = append(istioGateways, g)
+				break
+			}
+		}
+	}
+
+	if len(istioGateways) == 0 {
+		return nil, IsNotFoundError
+	}
+
+	return istioGateways[0], nil
+}
+
 var IsNotFoundError = fmt.Errorf("not found")
 
 type BadRequestError struct {
@@ -1370,7 +1410,7 @@ func (a *Agent) RunWebsocketTask(task func() error) error {
 			return nil
 		}
 
-		if !errors2.Is(err, &AuthError{}) {
+		if !goerrors.Is(err, &AuthError{}) {
 			return err
 		}