Excited to announce the release of the Kubernetes provider for StackQL.
StackQL allows you to query and interact with your cloud and SaaS assets using a simple SQL framework
The k8s
provider can be used to query and interact with events, namespaces, nodes, persistent volumes, pvcs, pods, services, service accounts and more.
Complete provider documentation for all of the Kubernetes resources, properties and methods is available here.
Here are the steps to get started with the Kubernetes provider:
Setup
If you are using a proxy (kubectl proxy
), follow these instructions:
Using a proxy
- Open an interactive shell (authentication will be handled using the proxy and your
.kube/config
):
AUTH='{ "k8s": { "type": "null_auth" } }'
./stackql shell --auth="${AUTH}"
- Pull the latest
k8s
provider for StackQL:
REGISTRY PULL k8s v0.1.1;
- Query away adding the following expressions to
WHERE
clauses in yourk8s
queries:
protocol = 'http'
cluster_addr = 'localhost:8080'
(or whatever port your proxy is listening on)
select name, namespace, uid, creationTimestamp
from k8s.core_v1.pod
where protocol = 'http'
and cluster_addr = 'localhost:8080'
order by name asc limit 3;
Direct cluster access
Generate an access token for your cluster, see Access Clusters Using the Kubernetes API.
Generate a certificate bundle for your cluster using the following code (for MacOS or Linux):
kubectl get secret -o jsonpath="{.items[?(@.type==\"kubernetes.io/service-account-token\")].data['ca\.crt']}" | base64 -i --decode > k8s_cert_bundle.pem
Alternatively, you could add the --tls.allowInsecure=true
argument to the stackql
command, it is not recommended however.
- Export the token to a variable and supply this as the provider authentication for StackQL:
export K8S_TOKEN='eyJhbGciOi...'
AUTH='{ "k8s": { "type": "api_key", "valuePrefix": "Bearer ", "credentialsenvvar": "K8S_TOKEN" } }'
./stackql shell --auth="${AUTH}" --tls.CABundle k8s_cert_bundle.pem
- Pull the latest
k8s
provider for StackQL:
REGISTRY PULL k8s v0.1.1;
- Run some queries (provide the
cluster_addr
as aWHERE
clause parameter):
select name, namespace, uid, creationTimestamp
from k8s.core_v1.service_account
where cluster_addr = '35.244.65.136'
and namespace = 'kube-system'
order by name asc;
Welcome your feedback by getting in touch or raising issues at stackql/stackql-provider-registry, give us some ⭐️ love while you are there!