Kubernetes
kubernetes Runs apps as pods on the Kubernetes cluster Pando runs in, one namespace per app.
Setup
Prepare the cluster
- Use a network plugin that enforces NetworkPolicy, such as Calico or Cilium.
- Grant the ServiceAccount
pandoin the namespacepandothese permissions, asdeploy/kubernetes/rbac.yamldoes:Where Resources Verbs Cluster namespaces get, list, create, delete Cluster serviceaccounts get Cluster rolebindings create Cluster clusterroles pando-app-manager bind Cluster nodes, pods get, list, watch Cluster persistentvolumes get, patch Cluster runtimeclasses get Cluster metrics.k8s.io pods, nodes list Each app namespace, through ClusterRole pando-app-manager pods, pods/log, pods/exec, services, configmaps, secrets, persistentvolumeclaims, resourcequotas, networkpolicies get, list, watch, create, update, patch, delete Namespace pando-edge deployments, services, secrets, poddisruptionbudgets, networkpolicies get, list, create, update, delete Namespace pando-edge pods list - Run
kubectl get servicecidr kubernetesand copy CIDRS. - Run
kubectl cluster-info dump | grep -m1 -- --cluster-cidrand copy the pod range. On a managed cluster, copy it from the cluster's network settings.
Choose an egress gateway image
Settings (24)
pod_cidrPod address rangeRequiredThe range the cluster assigns pods. Apps may not open connections into it.
service_cidrService address rangeRequiredThe range the cluster assigns Services. Apps may not open connections into it.
egress_gateway_imageEgress gateway imageAny image with Pando's binary at /usr/local/bin/pando. Empty, apps that restrict egress can't be deployed.
kubeconfigKubeconfig fileAdvancedA kubeconfig file, for running Pando outside the cluster during development. Pando's proxy reaches apps by cluster DNS names, so in production Pando runs inside the cluster.
contextKubeconfig contextAdvancedThe context in the kubeconfig file to use.
pando_namespacePando's namespaceAdvancedWhere Pando's server pods run. Apps admit connections only from Pando's server pods in this namespace.
pando_servicePando's ServiceAdvancedThe Service in front of Pando's server pods, in Pando's namespace. The edge sends traffic to it.
service_accountPando's ServiceAccountAdvancedThe ServiceAccount Pando's server pods run as, in Pando's namespace. It is bound to the app namespace role in each app namespace.
proxy_portProxy portAdvancedThe port Pando's proxy listens on in its pods.
app_roleApp namespace roleAdvancedThe ClusterRole bound to Pando's ServiceAccount in each app namespace.
cluster_domainCluster domainAdvancedThe cluster's DNS domain, which Service names end in.
api_server_cidrAPI server addressAdvancedOnly needed when the API server's address is inside the pod or Service range: the edge reads its routes from it.
storage_classStorage classAdvancedThe StorageClass app volumes are made with.
volume_size_bytesVolume sizeAdvancedBytes for a volume whose app does not say how large it is.
runtime_classRuntimeClassAdvancedA RuntimeClass to run apps under. One whose handler is gVisor (runsc) or Kata makes this a sandboxed runtime, which host policy can require.
node_selectorNode selectorAdvancedRun apps only on nodes with these labels, as key=value pairs separated by commas.
helper_imageHelper imageAdvancedRuns the network policy check, the port observer and volume backups. Any image with a shell, tar, wget and httpd.
api_qpsAPI requests a secondAdvancedThe most requests a second each Pando replica makes to the cluster's API.
api_burstAPI request burstAdvancedHow many requests a replica may make at once above that rate. At least the requests a second.
edge_namespaceEdge namespaceAdvancedThe namespace the edge runs in: the Traefik that takes ports 80 and 443 and passes traffic to Pando.
edge_replicasEdge replicasAdvancedHow many copies of the edge run, spread across nodes. At least 2.
edge_service_typeEdge Service typeAdvancededge_http_node_portEdge HTTP node portAdvancedThe port every node listens on for the edge's HTTP.
edge_https_node_portEdge HTTPS node portAdvancedThe port every node listens on for the edge's HTTPS.