faasflow / faas-flow-tower

control center for Faas-flow
https://github.com/s8sg/faas-flow
MIT License
48 stars 7 forks source link

`faas-flow-tower` not monitoring the flows #47

Open Abhishekghosh1998 opened 8 months ago

Abhishekghosh1998 commented 8 months ago

I am struggling to set up the faas-flow-tower utility.

Let's say what I tried... I tried setting up a simple flow-test function as follows:

flow-test.yml:

version: 1.0
provider:
  name: openfaas
  gateway: http://127.0.0.1:9999
functions:
  flow-test:
    lang: faas-flow
    handler: ./flow-test
    image: localhost:5000/flow-test:latest
    labels:
      faas-flow: 1
    annotations:
      faas-flow-desc: "test flow to greet"
    environment_file:
      - flow.yml
    secrets:
      - s3-secret-key
      - s3-access-key

flow.yml:

environment:
  gateway: "gateway.openfaas:8080" # The address of OpenFaaS gateway
  enable_tracing: true # tracing allows to monitor requests
  trace_server: "jaeger-agent.faasflow:5775" # The address of jaeger tracing agent
  consul_url: "consul.faasflow:8500" # The address of consul
  s3_url: "minio.faasflow:9000" # The address of minio

flow-test/handler.go:

package function

import (
    faasflow "github.com/faasflow/lib/openfaas"
)

// Define provide definition of the workflow
func Define(flow *faasflow.Workflow, context *faasflow.Context) (err error) {
    flow.SyncNode().Modify(func(data []byte) ([]byte, error) {
        result := "Hello " + string(data)
        return []byte(result), nil
    })
    return nil
}

// OverrideStateStore provides the override of the default StateStore
func OverrideStateStore() (faasflow.StateStore, error) {
    // NOTE: By default FaaS-Flow use consul as a state-store,
    //       This can be overridden with other synchronous KV store (e.g. ETCD)
    return nil, nil
}

// OverrideDataStore provides the override of the default DataStore
func OverrideDataStore() (faasflow.DataStore, error) {
    // NOTE: By default FaaS-Flow use minio as a data-store,
    //       This can be overridden with other synchronous KV store
    return nil, nil
}
$ faas-cli up -f flow-test.yml
...
Deploying: flow-test.

Deployed. 202 Accepted.
URL: http://127.0.0.1:9999/function/flow-test
$ echo "Abhishek" | faas-cli invoke flow-test
Hello Abhishek

So far so good.


The problem happens when I try to use faas-flow-tower.

faas-flow-tower/conf.yml:

  environment:
  basic_auth: true
  gateway_public_uri: "http://localhost:9999"
  gateway_url: "http://gateway.openfaas:8080/"
  secret_mount_path: "/var/openfaas/secrets"
  trace_url: "http://jaeger-query.faasflow:16686/"

In the above file I made change to the gateway_public_uri

faas-flow-tower/stack.yml:

provider:
  name: openfaas
  gateway: http://127.0.0.1:9999

functions:
  # dashboard
  faas-flow-dashboard:
    lang: dockerfile
    handler: ./dashboard
    image: localhost:5000/faas-flow-dashboard:3.0.8
    environment:
      read_debug: true
      write_debug: true
      combine_output: false
    environment_file:
      - conf.yml
    secrets:
      - basic-auth
    labels:
      com.openfaas.scale.zero: "false"

  # list flow functions deployed in openfaas
  list-flow-functions:
    lang: go
    handler: ./list-flow-functions
    image: localhost:5000/list-flow-functions:1.0.1
    environment:
      read_debug: true
      write_debug: true
      combine_output: false
    environment_file:
      - conf.yml
    secrets:
      - basic-auth
    labels:
      com.openfaas.scale.zero: "false"

  # Generate dot graph for faas-flow
  dot-generator:
    lang: go
    handler: ./dot-generator
    image: localhost:5000/dot-generator:1.2.0
    environment_file:
      - conf.yml
    environment:
      read_timeout: 120
      read_debug: true
      write_timeout: 120
      write_debug: true
      combine_output: false
    labels:
      com.openfaas.scale.zero: "false"

  # Collect metrics for faas-flow
  metrics:
    lang: go
    handler: ./metrics
    image: localhost:5000/metrics:1.6.0
    environment_file:
      - conf.yml
    environment:
      read_debug: true
      read_timeout: 120
      write_timeout: 120
      write_debug: true
      combine_output: false
    labels:
      com.openfaas.scale.zero: "false"

Under faas-flow-dashboard I just changed lang: Dockerfile to lang: dockerfile, and added the image local to be saved in local registry.

Before deploying I created a basic-auth secret as follows (I doubt this basic-auth step which I did):

kubectl create secret generic basic-auth --from-literal=username=abhishek --from-literal=password=abhishek --namespace openfaas-fn

And then I deploy faas-flow-tower as:

$ faas-cli up -g http://127.0.0.1:9999
...
Deploying: dot-generator.                                                                                                                                                                                           

Deployed. 202 Accepted.
URL: http://127.0.0.1:9999/function/dot-generator

Deploying: metrics.

Deployed. 202 Accepted.
URL: http://127.0.0.1:9999/function/metrics

Deploying: faas-flow-dashboard.

Deployed. 202 Accepted.
URL: http://127.0.0.1:9999/function/faas-flow-dashboard

Deploying: list-flow-functions.

Deployed. 202 Accepted.
URL: http://127.0.0.1:9999/function/list-flow-functions

image

faas-flow-tower does not monitor anything. Where I am going wrong in my setup? Please can anyone help me?

Abhishekghosh1998 commented 8 months ago

The issue was with the basic-auth secret attachment step. So that the faas-flow-tower is able to use the function information, we need the credentials of openfaas. So,

$ kubectl get secrets --namespace openfaas
NAME                              TYPE                                  DATA   AGE
basic-auth                        Opaque                                2      4d1h
default-token-c6r6b               kubernetes.io/service-account-token   3      4d1h
openfaas-controller-token-426cl   kubernetes.io/service-account-token   3      4d1h
openfaas-prometheus-token-9fvd6   kubernetes.io/service-account-token   3      4d1h
sh.helm.release.v1.openfaas.v1    helm.sh/release.v1                    1      4d1h

The basic-auth mentioned in the first line is of interest to us. We shall try to create a copy of that in the openfaas-fn namespace.

$ kubectl get secret basic-auth -n openfaas -o yaml > secret.yml

secret.yml:

apiVersion: v1
data:
  basic-auth-password: ZW91Y2ZoMUJ3SzZW
  basic-auth-user: YWRtaW4=
kind: Secret
metadata:
  annotations:
    helm.sh/hook: pre-install
  creationTimestamp: "2023-10-09T04:56:15Z"
  labels:
    app: openfaas
    chart: openfaas-14.1.9
    component: gateway
    heritage: Helm
    release: openfaas
  name: basic-auth
  namespace: openfaas
  resourceVersion: "1414"
  uid: c87d81e5-5160-4624-8ec0-eb4c0d2515b6
type: Opaque

Edit the above yml file to:

apiVersion: v1
data:
  basic-auth-password: ZW91Y2ZoMUJ3SzZW
  basic-auth-user: YWRtaW4=
kind: Secret
metadata:
  name: basic-auth
  namespace: openfaas-fn
type: Opaque

And then create the secret:

$ kubectl create -f secret.yml