qube is a GraphQL API provider for your Kubernetes cluster. It's working as a separate proxy above native Kubernetes API.
GraphQL schema is dynamically built from the openapi/swagger API specification exposed by the Kubernetes cluster.
- Queries
- Mutations
- Subscriptions
qube supports the Bearer token auth flow in the same manner as Kubernetes API. Set Authorization header with your Kubernetes account token to pass the request.
node > 10
npm start
Navigate to http://localhost:49020/ in your browser - this will launch the GraphQL Playground which you can use to interact with API.
NODE_ENV - string, set to production to mute stacktrace proxying to a client, see more here
IN_CLUSTER- bool, set to false if you run outside of Kubernetes cluster
KUBERNETES_HOST - string, path to Kubernetes cluster API, use with IN_CLUSTER=false
API_SCHEMA_FILE_PATH - string, set path to swagger.json, if you run qube outside of Kubernetes cluster and do not want provide it with any KUBE_SCHEMA_TOKEN
KUBE_SCHEMA_TOKEN - string, a token from account, which will be used to request OpenAPI schema of Kubernetes cluster, use with IN_CLUSTER=false and without API_SCHEMA_FILE_PATH
USE_JWT_AUTH - bool, set to false if you do not want to proxify client Authorization header to Kubernetes
REMOVE_PATHS - string, contains a comma-separated list of path strings that should be removed from the OpenAPI Specification (OAS) object. It's useful for dynamically excluding certain API endpoints or paths based on runtime configuration.
Notice: In case of
USE_JWT_AUTH=falsedefault token (orKUBE_SCHEMA_TOKEN) will be used for all user requests, which can be unsecure.
Query
mutation CreateSecretMutation($namespace: String!, $name: String!, $data: JSON) {
createCoreV1NamespacedSecret(namespace: $namespace, ioK8sApiCoreV1SecretInput: {kind: "Secret", stringData: $data, metadata: {name: $name}}) {
data
type
metadata {
name
}
}
}Variables
{
"data": {"key": "value"},
"namespace": "my-namespace",
"name": "my-secret"
}Query
query GetPodsQuery($namespace: String!) {
ioK8sApiCoreV1PodList(namespace: $namespace) {
items {
metadata {
name
}
spec {
hostname
containers {
image
name
}
}
}
}
}Variables
{
"namespace": "my-namespace"
}