Code Monkey home page Code Monkey logo

forecastle's Introduction

Forecastle Forecastle

Get started with Stakater

Table of Contents:

Introduction

Problem

  • Finding and accessing applications on Kubernetes can be challenging without a central hub.
  • It's essential to have a dynamic way to discover and list applications that are actively running on Kubernetes.
  • Developers often need a streamlined portal to access essential tools like Jenkins, Nexus, Kibana, Grafana, and others.

Solution

Forecastle gives you access to a control panel where you can see your running applications and access them on Kubernetes.

Forecastle provides a unified control panel, serving as a convenient gateway to view and access your applications deployed on Kubernetes. Whether it's monitoring tools, CI/CD pipelines, or other applications, Forecastle brings them all to your fingertips in one central location.

Screenshot

Features

Forecastle boasts a range of functionalities designed to streamline the management and accessibility of applications in Kubernetes environments. Key features include:

  1. Comprehensive App Listing: Forecastle aggregates and displays apps from all namespaces specified in the ConfigMap, providing a centralized view of your resources.

  2. Search Functionality: Quickly locate specific applications with an intuitive search feature, enhancing user experience and efficiency.

  3. Namespace Grouping: Apps are neatly organized and grouped by their respective namespaces, making navigation and management more straightforward.

  4. Customizable Header: Tailor the look and feel of your Forecastle dashboard with configurable header options, including title customization and color schemes.

  5. Support for Multiple Instances: Forecastle is designed to support multiple instances, accommodating varied and complex deployment scenarios.

  6. Custom Apps Integration: Easily add non-Kubernetes or external applications to your dashboard for a more comprehensive overview of your tools and resources.

  7. ForecastleApp CRD: Utilize the ForecastleApp Custom Resource Definition to dynamically add custom applications, further enhancing the dashboard’s flexibility.

  8. Custom Grouping and URLs: Organize your applications into custom groups and assign specific URLs for tailored navigation and accessibility.

  9. Detailed App Information: Each application comes with detailed information, offering insights and essential details at a glance.

Admin Guide

This section is intended for Administrators aiming to deploy Forecastle in Kubernetes environments. Forecastle offers flexible deployment options, accommodating both Kubernetes and OpenShift platforms with ease.

You have the choice of deploying Forecastle using traditional Kubernetes manifests or through Helm charts. Detailed instructions for both methods are provided below to guide you through the deployment process.

Vanilla Manifests

Step 1: Apply manifests

You can get Forecastle by running the following command on your cluster:

kubectl apply -f https://raw.githubusercontent.com/stakater/Forecastle/master/deployments/kubernetes/forecastle.yaml

Step 2: Update configmap

Modify the namespaceSelector key in the Forecastle ConfigMap to list the namespaces you want Forecastle to monitor. For detailed instructions, see namespace selector configuration for instructions.

Helm Charts

If you have Helm configured on your Kubernetes cluster, deploy Forecastle using the Helm chart. The chart is located here.

Adjust the configuration in values.yaml if required and run the following command:

helm install forecastle ./deployments/kubernetes/chart/forecastle

Configuration

Forecastle simplifies the discovery and management of applications on Kubernetes and OpenShift. It utilizes specific annotations on ingresses and offers various configuration options for customization.

You can customize Forecastle using either a ConfigMap or the values.yaml file when deploying with Helm. Below are the configurable fields:

Field Description Default Type
namespaceSelector A fine grained namespace selector which uses a combination of hardcoded namespaces well as label selectors any: true NamespaceSelector
headerBackground Background color of the header (Specified in the CSS way) null string
headerForeground Foreground color of the header (Specified in the CSS way) null string
title Title for the forecastle dashboard "Forecastle - Stakater" string
instanceName Name of the forecastle instance "" string
customApps A list of custom apps that you would like to add to the forecastle instance {} []CustomApp
crdEnabled Enables or disables ForecastleApp CRD true bool

Detailed Configurations

NamespaceSelector

Selects namespaces for Forecastle to monitor, either by listing specific namespaces or using label selectors.

Field Description Default Type
any Boolean describing whether all namespaces are selected in contrast to a list restricting them false bool
labelSelector Filter namespaces based on kubernetes metav1.LabelSelector type null metav1.LabelSelector
matchNames List of namespace names null []string

Note: If you specify both labelSelector and matchNames, Forecastle will take a union of all namespaces matched and use them.

Custom Apps

Allows adding non-Kubernetes or external apps to Forecastle. This is an extremely useful feature especially when your apps are distributed both on kubernetes and off it. You can pass an array of custom apps inside the config.

Field Description Type
name Name of the custom app String
icon URL of the icon for the custom app String
url URL of the custom app String
group Group for the custom app String
properties Additional Properties of the app as a map map[string]string
networkRestricted Whether app is network restricted or not bool

Example Configuration

Below is an example of how you might configure Forecastle using a combination of namespace selectors and custom apps:

namespaceSelector:
  labelSelector:
    matchLabels:
      component: redis
    matchExpressions:
      - {key: tier, operator: In, values: [cache]}
  matchNames:
  - test
title:
headerBackground:
headerForeground: "#ffffff"
instanceName: "Hello"
crdEnabled: false
customApps:
- name: Hello
  icon: http://hello
  url: http://helloicon
  group: Test
  properties:
    Version: 1.0

This configuration demonstrates how to set namespace selectors, customize the header's appearance, enable or disable the CRD feature, and add a custom app with specific properties.

Scaling with Multiple Instances

Forecastle's design allows for running multiple instances, providing scalability and flexibility in diverse environments. Here's how you can effectively scale Forecastle.

Deploying Multiple Instances

Basic Deployment: To run multiple Forecastle instances, deploy each instance in a separate namespace. Specify a list of namespaces for each instance to monitor ingresses.

Configuring Named Instances for Enhanced Flexibility

Named Instance Configuration: For greater control over which applications are displayed in specific instances (irrespective of their namespaces), configure each Forecastle instance with a unique name using the instanceName setting in the Forecastle configuration.

Controlling Application Display Across Instances

Application-Specific Instance Display: After naming your instances, use the forecastle.stakater.com/instance annotation on your ingresses. This annotation dictates which application appears in which Forecastle instance.

Multiple Instance Display: It's possible for a single application (ingress) to appear in multiple Forecastle dashboards. For instance, if you have two instances named dev-dashboard and prod-dashboard, adding dev-dashboard,prod-dashboard in the ingress's instance annotation will ensure the application is visible on both dashboards.

Helm Deployment Considerations

Unique Naming in Helm: When deploying Forecastle instances via Helm, ensure each instance has a unique nameOverride value (default is forecastle). This step is crucial to avoid conflicts between global resources like ClusterRole and ClusterRoleBinding.

User Guide

This section is intended for Users aiming to use Forecastle in their Kubernetes environments.

Ingresses

Forecastle identifies applications through annotations added to Kubernetes ingresses. Here’s how you would add the necessary annotations:

Annotation Description Required
forecastle.stakater.com/expose Add this with value true to the ingress of the app you want to show in Forecastle true
forecastle.stakater.com/icon Icon/Image URL of the application; An icons/logos/images collection repo Icons false
forecastle.stakater.com/appName A custom name for your application. Use if you don't want to use name of the ingress false
forecastle.stakater.com/group A custom group name. Use if you want the application to show in a different group than the namespace it is running in false
forecastle.stakater.com/instance A comma separated list of name/s of the forecastle instance/s where you want this application to appear. Use when you have multiple forecastle dashboards false
forecastle.stakater.com/url A URL for the forecastle app (This will override the ingress URL). It MUST begin with a scheme i.e., http:// or https:// false
forecastle.stakater.com/properties A comma separate list of key:value pairs for the properties. This will appear as an expandable list for the app false
forecastle.stakater.com/network-restricted Specify whether the app is network restricted or not (true or false) false

ForecastleApp CRD

Another way Forecastle enhances your ability to dynamically integrate applications is by using ForecastleApp Custom Resource Definition (CRD). This feature adds a layer of flexibility, allowing you to separate the application configuration from the Ingress settings and Forecastle's own configuration.

Creating a ForecastleApp:

To create a ForecastleApp, use the following template as a guide. This configuration allows you to specify the app name, group, icon, URL, and additional properties:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: app-name
spec:
  name: My Awesome App
  group: dev
  icon: https://icon-url
  url: http://app-url
  networkRestricted: "false"
  properties:
    Version: 1.0
  instance: "" # Optional

Automatically discover URL's from Kubernetes Resources

ForecastleApp CRD supports automatic URL discovery from certain Kubernetes resources, such as:

  • Ingress: Ensures the application's URL is automatically retrieved from the Ingress resource in the same namespace.

To utilize this feature, add the urlFrom field to your ForecastleApp specification like so: Please note that the type of resource that you want to discover has to be in the same namespace as the ForecastleApp CR.

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: app-name
spec:
  name: My Awesome App
  group: dev
  icon: https://icon-url
  urlFrom: # This is new
    ingressRef:
      name: my-app-ingress

This configuration instructs Forecastle to fetch the app URL directly from the specified Ingress resource, simplifying deployment and configuration.

Note: To use the CRD feature, ensure it's enabled by setting crdEnabled: true in the Forecastle configuration or by enabling it in the Helm chart.

Developer Guide

Bug Reports & Feature Requests

Please use the issue tracker to report any bugs or file feature requests.

Developing

PRs are most welcome. In general, we follow the "fork-and-pull" Git workflow.

  1. Fork the repo on GitHub.
  2. Clone the project to your own machine.
  3. Commit changes to your own branch.
  4. Push your work back up to your fork.
  5. Submit a Pull request so that we can review your changes.

NOTE: Be sure to merge the latest from "upstream" before making a pull request!

Help

Got a question? File a GitHub issue.

Talk to us on Slack

Join and talk to us on the #tools-imc channel for discussing Forecastle

Join Slack Chat

Changelog

View our closed Pull Requests.

License

Apache2 © Stakater

About

Why the name "Forecastle"?

The term "Forecastle" originates from maritime vocabulary, referring to the upper deck of a ship situated at the bow, just in front of the foremast. Historically, it's a place from where sailors navigate and observe the vast sea ahead.

In the context of our project, we've adopted this name as a metaphor for the role Forecastle plays in the world of Kubernetes. Just like the ship's forecastle, our Forecastle acts as a central observation and control panel. It gives users a comprehensive view of all their running applications on Kubernetes, specifically those marked with a designated annotation. Forecastle is designed to be your Kubernetes dashboard, providing a clear view and easy access to your deployed applications, much like a sailor surveying the sea from the ship's bow.

Forecastle is maintained by Stakater. Like it? Please let us know at [email protected]

See our other projects or contact us in case of professional services and queries on [email protected]

forecastle's People

Contributors

abdulhaseeb2 avatar ahmedwaleedmalik avatar ahsan-storm avatar aliartiza75 avatar bnallapeta avatar c-dst avatar callum-stakater avatar davidkarlsen avatar dependabot[bot] avatar faizanahmad055 avatar hazim1093 avatar hussnain612 avatar jkroepke avatar julien-sugg avatar justinlex avatar kahootali avatar karl-johan-grahn avatar mashhoodijaz avatar muneebaijaz avatar rasheedamir avatar renovate[bot] avatar resamaraschi avatar sastorsl avatar sherifkayad avatar skiepp avatar stakater-user avatar talha0324 avatar tmeltser avatar usamaahmadkhan avatar waseem-h avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

forecastle's Issues

Add access level mark on discovered services

Some of the services are restricted on the corporate network for security purposes e.g. services that expose cluster info/data. There should be some kind of indication (widget) which could indicate that this service is network restricted so that the users are more aware about these services.

Feature request - add apps by default

Great app - considering to replace Homer. I would like to propose a differentiating feature when compared to Homer and similar apps that do not monitor the k8s control plane.

Currently it is necessary to add the forecastle.stakater.com/expose annotation to each ingress. This makes easy to forget adding new applications to forecastle. It also makes it similar to other apps where I have to manually update a list of apps.

I would like to add all ingresses by default so they show up in the dashboard - then I can later on do the tuning such as changing the icon. This way the list is guarantied to include all apps deployed in the cluster without admin intervention.

This might be implemented with an addByDefault Forecastle option which would default to False to follow the current implementation.

It should still be possible to exclude apps by explicitly setting forecastle.stakater.com/expose to False.

Multiple Forecastle dashboards

We should allow users to deploy multiple instances of Forecastle and label them.

This way they can create custom dashboards per team for example they can have the following dashboard running simultaneously:

  • ProductTeam1: Jenkins(Namespace: tools), App1(Namespace: p1), App2(Namespace: p1)
  • ProductTeam2: Jenkins(Namespace: tools), App1(Namespace: p2), App2(Namespace: p2)

Although we can restrict forecastle to watch in certain namespaces but this will give users more flexibility as to which app should be shown on which forecastle instance. An example would be running forecastle with a flag --instance-name devteam and have an annotation like forecastle.stakater.com/instance: devteam which can be added to the apps for devteam

Allow custom app names

Right now we assume that the ingress name is the same as the app name. We need to allow the user to be able to control application name.

Proposal
We can create an annotation that can be used for specifying the app's name. The default behavior would be the same. Annotation can be something like forecastle.stakater.com/appName.

Each page refresh must get new list of apps to be listed

Currently forecastle pod needs to be deleted in order for new apps to be listed; which is quite cumbersome and make forecastle bit less useful!

To start with each page refresh should fetch new list of apps to be listed; so, it doesn't need restart.

Feature Request: Display additional app info as tool tip

We use Forecastle and really like it. I'm trying to convince other teams in our company to use it as well. It would be great to be able to display additional information on a registered app e.g. in a tool tip or something alike.

what
Display additional information for a registered app such as links to monitoring and tracing tools, maintainer, SLAs, image version and so on. This information could be displayed as tool tip or in an info panel.

why
Display all relevant info and links for an app in a central place (Single point of truth for all apps in a k8 cluster).

how
Additional info can be registered as a simple key/value list or an html snippet by the app. Forecastle then displays the provided data as a table in a tool tip or info panel. URLs are recognized based on regular expressions and automatically displayed as links.

Feature request - change forcastle root path

Feature
Ability to change forecastle app root path

Use case
Serve several instances of forecastle under the same FQDN but through different paths.

Current issue
I have tried doing URL path rewrite through ingress controller, something like exposing one forecastle instance through example.com/firstinstace. When opening this URL in the browser, it tries some GETs of assets and favicon though the apps root URL example.com/ which leads to a broken page.
If the apps root could be changed, there would be no need to do a path rewrite.

How to
I don't understand react but I found this article https://skryvets.com/blog/2018/09/20/an-elegant-solution-of-deploying-react-app-into-a-subdirectory/ that explains the issue and how to solve it in the an-instruction-for-the-solution-with-base-url-element section.

List apps per namespace

As same app can be deployed in different namespaces so, to make it more understandable/readable/usable apps should be listed per namespace.

To start with we can have just one page with different sections per namespace. So, we can have a section template with header containing name of the namespace and the body listing the apps; just like we are showing right now.

Overriding Group Name

Although forecastle supports displaying apps per namespace, sometimes its not ideal to have the namespace name as the group name for certain apps.

Proposal
We should have an annotation for overriding the group name e.g., namespace via annotation. The default behavior will be the same e.g., the namespace name will become the group name, but for overriding we can have an annotation like forecastle.stakater.com/groupName.

Error message on web page but nothing in logs

Using stakater/forecastle:v1.0.54 docker image, the web page displays with header and footer, but the main panel just says:

Results couldn't be loaded due to an error
  • There is nothing in the server logs to indicate an error.
  • There is nothing in the web browser console.
  • Viewing all requests in the browser development tools shows all requests returned with status 200.

This makes it very hard to debug.

My guess is that it is not finding any apps and is failing to display an empty list.

Icon value is wrong

Here is the value set in the manifest:

forecastle.stakater.com/icon: https://github.com/stakater/ForecastleIcons/raw/master/kibana.png

And here is the content of apps.json we recieve:

[{"Name":"kibana","URL":"https://cp.lab187.k8syard.com/kibana/","Icon":"https"}]

Look the Icon value is wrong! Therefore the icon is not loaded as expected. Please add unit test for this.

Namespace "dev" is hardcoded in the rbac CRB

Its quite misleading with hardcoded namespace name dev in the CRB

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: forecastle-cluster-ingress-role-binding
  labels:
    app: forecastle
    group: com.stakater.platform
    provider: stakater
    version: "0.0.17"
    chart: "forecastle-0.0.17"
    release: "RELEASE-NAME"
    heritage: "Tiller"
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: forecastle-cluster-ingress-role
subjects:
- kind: ServiceAccount
  name: forecastle
  namespace: dev

https://github.com/stakater/Forecastle/blob/master/deployments/kubernetes/forecastle.yaml#L98

Add support for multiple paths in Ingresses

Currently forecastle only picks apps and associates them with the first path in their ingress. We need to add functionality for forecastle to consider ingresses with multiple paths

Feature suggestion - Configurable header

You already allow the header colour to be changed but it would be great if there were a way to inject more CSS, either a URL to a file or ideally as part of the configmap

apps is null despite ForecastleApp resource present

Hi!

I have deployed forecastle pretty much along the lines of the helm chart.
My config looks like this:

  config.yaml: |-
    headerBackground: "#3f51b5"
    headerForeground: "#ffffff"
    instanceName: "skr forecastle"
    title: Snyk Management Cluster
    crdEnabled: true
    namespaceSelector:
      any: true

I added a single ForecastleApp CRD to my cluster:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: argocd
spec:
  group: Command & Control
  icon: https://argoproj.github.io/static/argo-wheel.23b3ad84.png
  name: ArgoCD
  networkRestricted: false
  url: http://<redacted>

This app does not seem to get picked up, though. The only log lines from forecastle Pods are:

skr/forecastle-f4f54b4b4-6frnz[forecastle]: time="2020-04-01T11:56:46Z" level=info msg="Listening at port 3000" _source="Forecastle/forecastle.go:42"
skr/forecastle-f4f54b4b4-xh9wq[forecastle]: time="2020-04-01T11:56:54Z" level=info msg="Looking for forecastle apps in the following namespaces: []" _source="handlers/appsHandler.go:41"

Meanwhile /api/apps returns null, leading the frontend to just display "Results couldn't be loaded due to an error"

Any idea what I might be missing?

Forecaslte page fails to load if CR points to a route that doesn't exist

Steps to Recreate:
Create a CustomResource which refers to a route that doesn't exist

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: <TEST_NAME>
  namespace: <TEST_NAMESPACE>
spec:
  name: TestRoute
  group: Build
  icon: <ICON_URL>
  urlFrom:
    routeRef:
      name: some-app-route    # This doesn't exist in the namespace

Forecastle UI fails to load and shows the following error:
Results couldn't be loaded due to an error

Error from the pod:
error msg="An error occurred while looking for forceastle CRD apps: routes.route.openshift.io \"some-app-route\" not found" _source="filename/filename.go:22"

Expected Behavior:
If the route doesn't exist. Throw an error and ignore that particular CR and loads all the other valid CRs.

bug: Forecastle crd spec.urlFrom.ingressRef.name does not work

We're using Forecastle v1.0.68, everytime we try to apply the forecastle crd with spec.urlFrom.ingressRef.name: xxx, it gets ignored.

Attempt:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: "test-1"
  namespace: test
spec:
  name: "test-app"
  group: "test-group"
  icon: ""
  networkRestricted: false
  instance: "test1"
  urlFrom:
    ingressRef:
      name: "test-ingress"

After it gets applied:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: "test-1"
  namespace: test
spec:
  name: "test-app"
  group: "test-group"
  icon: ""
  networkRestricted: false
  instance: "test1"
  urlFrom:
    ingressRef:
      name: {}

SA cannot list Ingress in namespace

Hello guys,

I am sorry to bother but I am trying out Forecastle in my EKS cluster but I am a bit confused.

I did use the vanilla manifests approach but when accessing the UI I get these logs:

time="0001-01-01T00:00:00Z" level=info msg="Listening at port 3000" _source="Forecastle/forecastle.go:40"

time="0001-01-01T00:00:00Z" level=info msg="Namespaces to look for forecastle apps: [stakater test-app-ingress]" _source="handlers/appsHandler.go:40"

time="0001-01-01T00:00:00Z" level=error msg="An error occurred while looking for forceastle appsingresses.extensions is forbidden: User \"system:serviceaccount:forecastle:forecastle\" cannot list resource \"ingresses\" in API group \"extensions\" in the namespace \"test-app-ingress\"" _source="handlers/appsHandler.go:44"

Am I missing anything?

regards,
Matteo

Feature request: Annotate Pod template

When Forecastle's configuration changes, it needs to be restarted to load the changes. I know Stakater's solution is Reloader, but Helm also has a solution, which is to annotate the Pod template with a checksum of the configuration.

Ideally, the Forecastle chart would do this automatically. At a minimum, the chart should allow for annotations of the Pod template much like it allows annotation of the Deployment itself.

Wrong URI composition when ServicerPort is a reference to a label

I have several ingress configured as following :

  kind: Ingress
  metadata:
    name: alertmanager
    namespace: monitoring
    annotations:
      forecastle.stakater.com/expose: 'true'
      forecastle.stakater.com/icon: 'https://github.com/stakater/ForecastleIcons/raw/master/prometheus.png'
      kubernetes.io/ingress.class: internal
      nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
    labels:
      app: alertmanager
  spec:
    rules:
      - host: alertmanager.examples.com
        http:
          paths:
            - path: '/'
              backend:
                serviceName: alertmanager-main
                servicePort: web

Where servicePort is the label defined in the service.

what is happening

Forecastle is composing the uri like http://alertmanager.examples.comweb/.

how it should behave

it should ignore the servicePort param because the ingress expose them in 80/443 and compose the uri like http://alertmanager.examples.com

Feature Request: Support Istio `VirtualService`

Forecastle is wonderful! It's a missing piece in the kubernetes ecosystem.

what

  • Add support for the VirtualService CRD

why

  • Forecastle doesn't discover annotations on VirtualService CRDs which are used instead of Ingress resources to configure routing to backend services

use-case

  • We're moving microservices over to using istio for better tracing and telemetry, but still want to announce services to forecastle.

Feature Request : Traefik IngressRoute / IngressRouteTCP

Hello,

First thanks for the app, it's very usefull for us.

We migrate our cluster to traefik CRDs ingressroute* and we saw that they aren't be supported.

It would be great to add this feature. We don't dev in go otherwise i would submit a PR

Thanks.
Chris

v1.0.62 broken

I have been running v1.0.62 fine for weeks, this morning when my pod restarted I started getting just 404 responses from the application. Looking at docker hub it appears someone pushed a new image to v1.0.62 yesterday so I think someone has pushed something which is broken?

Switching back to v1.0.61 or forward to v1.0.63 and it works fine again

Ability to specify app root path

As explained by @Nuru in another ticket:
I would also like to have the ability to explicitly specify the linked path via an annotation. It is an issue right now in that I have an app where I want the Forecastle icon to take the user to https://host/console/view but it only goes to https://host/

This is somewhat similar to, but different than, the nginx-ingress annotation nginx.ingress.kubernetes.io/app-root. In this case, I do not want to generally redirect /, I just want to specify the path for the Forecastle link.

Helm repo

Just a feature request to add a proper helm repository (probably just using github pages like the majority of them)

fails on properties

annotated the ingress with:
forecastle.stakater.com/properties: "finodsGroup=test1,applicationEnvironment=test2"

and it fails with:

time="2020-01-03T19:40:10Z" level=info msg="Found ingress with Name 'eos-jfr-srv-d1-fsjetty' in Namespace 'eos-jfr-srv-d1'" _source="filename/filename.go:22"
github.com/stakater/Forecastle/pkg/forecastle/ingressapps.convertIngressesToForecastleApps(0xc000680000, 0x8, 0x8, 0x1, 0xc0000171c8, 0xc0000ac060)
        /go/src/github.com/stakater/Forecastle/pkg/forecastle/ingressapps/apps.go:74 +0x413
github.com/stakater/Forecastle/pkg/forecastle/ingressapps.(*List).Populate(0xc0000178d8, 0xc0004952e0, 0x1, 0x1, 0x2)
        /go/src/github.com/stakater/Forecastle/pkg/forecastle/ingressapps/apps.go:52 +0x209
github.com/stakater/Forecastle/pkg/handlers.AppsHandler(0x1776d40, 0xc0003c0000, 0xc00053c800)
        /go/src/github.com/stakater/Forecastle/pkg/handlers/appsHandler.go:44 +0x521
net/http.HandlerFunc.ServeHTTP(0x162b318, 0x1776d40, 0xc0003c0000, 0xc00053c800)
        /usr/local/go/src/net/http/server.go:2007 +0x44
github.com/gorilla/mux.(*Router).ServeHTTP(0xc000270b60, 0x1776d40, 0xc0003c0000, 0xc00053c800)
        /go/pkg/mod/github.com/gorilla/[email protected]/mux.go:162 +0x104
net/http.serverHandler.ServeHTTP(0xc0001461c0, 0x1776d40, 0xc0003c0000, 0xc00053c400)
        /usr/local/go/src/net/http/server.go:2802 +0xa4
net/http.(*conn).serve(0xc0000a2aa0, 0x177aac0, 0xc0004ef540)
        /usr/local/go/src/net/http/server.go:1890 +0x875
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:2927 +0x38e```

Feature request: Add arbitrary links

Feature Request:

It would be nice if I could just explicitly add an external link (for example to PagerDuty) to a Forescatle ingress group without requiring an ingress. Forecastle puts together a nice collection of all the dynamic ingresses, but I would like to include links to external resources on the same page

Results couldn't be loaded due to an error

I installed forecastle using helm install forecastle stakater/forecastle.

When I access the web interface I only get "Results couldn't be loaded due to an error".
There is no error shown in kubectl logs.

What might be wrong? Is there a way to debug further?

1.0.65?

I'm seeing this chart version:

helm search repo forecastle
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                             
stakater/forecastle     1.0.65                          forecastle chart that runs on kubernetes

but only 1.0.63 in this repo.
Where does it come from?

broken pipe when many apps

We consistently get:

time="2022-06-25T22:30:24Z" level=info msg="Found forecastleApp with Name 'wel-user-mgmt-shb-s1' in Namespace 'wel-test'" _source="filename/filename.go:22"
time="2022-06-25T22:30:25Z" level=error msg="An error occurred while rendering json to output: write tcp 10.200.58.74:3000->10.200.58.1:41314: write: broken pipe" _source="filename/filename.go:22"
2022/06/25 22:30:25 http: superfluous response.WriteHeader call from github.com/stakater/Forecastle/pkg/handlers.AppsHandler (appsHandler.go:96)

in the log, and forecastle is unable to respond when there is a lot of apps in the cluster.

Group Ordering

I have a mix of k8s ingress defined apps and CRD defined apps and group ordering seems to be random-ish. It appears that the ingress defined apps are first, in semi-alphabetical order, then the CRD apps groups appear next and they seem to be alphabetical.

Helm forecastle 1.0.65 CustomResourceDefinition "forecastleapps.forecastle.stakater.com" is invalid

When I apply the helm chart 1.0.65 with CRD on a fresh and empty kubernetes 1.19.11 cluster I get the following errors

The CustomResourceDefinition "forecastleapps.forecastle.stakater.com" is invalid: 
* spec.validation.openAPIV3Schema.type: Required value: must not be empty at the root
* spec.preserveUnknownFields: Invalid value: true: cannot set to true, set x-preserve-unknown-fields to true in spec.versions[*].schema instead

I can fix this errors by changing the CRD in the following way:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: forecastleapps.forecastle.stakater.com
spec:
  conversion:
    strategy: None
  group: forecastle.stakater.com
  names:
    kind: ForecastleApp
    listKind: ForecastleAppList
    plural: forecastleapps
    singular: forecastleapp
  preserveUnknownFields: false # has to be false, otherwise '* spec.preserveUnknownFields: Invalid value: true: cannot set to true, set x-preserve-unknown-fields to true in spec.versions[*].schema instead'
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        type: object  # needed, otherwise '* spec.validation.openAPIV3Schema.type: Required value: must not be empty at the root''
        properties:

The lines with the comments are my quick workarounds to get things deployed and running.

Add the ability to ignore ingress.class requirement

Currently, Forecastle filters out ingresses if the ingress.class annotation isn't present.

In our use case, we deploy Pomerium for our authentication layer. Pomerium requires the ingress.class annotation to be absent in favour of some other specific annotations.

The services in question are still very much exposed and we wish for them to show in Forecastle.

If we set the Forecastle expose annotation to true, I'd expect the ingress to be exposed in Forecastle regardless of the presence of an ingress.class.

Need to include RBAC permissions for networking.k8s.io API

Ingress apiVersion extensions/v1beta1 is deprecated and being replaced with networking.k8s.io/v1beta1, which itself is now deprecated and being replaced with networking.k8s.io/v1. Forecastle needs to support the new apiVersion by both monitoring for it and enabling access to monitor for it by adding networking.k8s.io to the RBAC API list:

- apiGroups: ["", "route.openshift.io", "extensions"]

Log level

Is there a way to increase the log level?

I can't figure it out, my manifests are

REBELinBLUE/k3s-rpi-cluster@d726cbb (custom build of the image to run on an raspberry pi)

but all I get in the output is

time="0001-01-01T00:00:00Z" level=info msg="Listening at port 3000" _source="Forecastle/forecastle.go:40"

nothing on the launchpad and the /apps endpoint just returns null

Inadequate defaults in values.yaml

  • Upon deployment with helm deployment and service receive irrelevant annotations with what seems to be some values internal to stakater org:

deployment:
authproxy.stakater.com/redirection-url: https://cp.stackator.com
service:
config.xposer.stakater.com/Domain: "stackator.com"
etc.

There is no other way to override those values than to edit values.yaml - therefore this chart cannot be packed and hosted (in ChartMuseum for example).

  • There is no ingress created with deployment through helm. Seems like ingress creation is handled by another tool - xposer, that is neither a dependency of forecastle nor even mentioned on the README.md. Maybe add a config option to choose one or another?

  • README.md has outdated configuration parameter names. See crdEnabled vs values.yaml: createCustomResource .

  • README.md also does not mention that all config values have to be prepended with forecastle., therefore helm ... --set title="My Title" has no effect and has to be transformed to helm ... --set forecastle.config.title="My Title".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.