diff --git a/PERMISSIONS.md b/PERMISSIONS.md new file mode 100644 index 000000000..808b2a232 --- /dev/null +++ b/PERMISSIONS.md @@ -0,0 +1,328 @@ +![Mizu: The API Traffic Viewer for Kubernetes](assets/mizu-logo.svg) +# Kubernetes permissions for MIZU + +This document describes in details all permissions required for full and correct operation of Mizu + +We broke down this list into few categories: +- Required - what is needed for `mizu` to run properly on your k8s cluster +- Optional - permissions needed for proper name resolving for service & pod IPs + - addition required for policy validation + + + +# Required permissions + +Mizu needs following permissions on your Kubernetes cluster to run properly + +```yaml +- apiGroups: + - "" + resources: + - pods + verbs: + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services + verbs: + - create + - delete +- apiGroups: + - apps + resources: + - daemonsets + verbs: + - create + - patch + - delete +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services/proxy + verbs: + - get +``` + +## Permissions required for service / pod name resolving (opt) + +Optionally, for proper resolving of IP addresses to Kubernetes service name, Mizu needs below permissions: + +```yaml +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - apps + resources: + - daemonsets + verbs: + - create + - patch + - delete +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services/proxy + verbs: + - get +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - get + - create + - delete +- apiGroups: + - apps + - extensions + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - apps + - extensions + resources: + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + - apps + - extensions + resources: + - endpoints + verbs: + - get + - list + - watch +``` + +## Permissions for Policy rules validation feature (opt) + +Optionally, in order to use the policy rules validation feature, Mizu requires the following additional permissions: + +```yaml +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - create + - delete +``` + +- - - + +## Namespace-Restricted mode + +Alternatively, in order to restrict Mizu to one namespace only (by setting `agent.namespace` in the config file), Mizu needs the following permissions in that namespace: + +```yaml +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services + verbs: + - get + - create + - delete +- apiGroups: + - apps + resources: + - daemonsets + verbs: + - get + - create + - patch + - delete +- apiGroups: + - "" + resources: + - services/proxy + verbs: + - get +``` + +### Name resolving in Namespace-Restricted mode (opt) + +To restrict Mizu to one namespace while also resolving IPs, Mizu needs the following permissions in that namespace: + +```yaml +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - apps + resources: + - daemonsets + verbs: + - get + - create + - patch + - delete +- apiGroups: + - "" + resources: + - services/proxy + verbs: + - get +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - get + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - get + - create + - delete +- apiGroups: + - apps + - extensions + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - apps + - extensions + resources: + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + - apps + - extensions + resources: + - endpoints + verbs: + - get + - list + - watch +``` diff --git a/README.md b/README.md index aa9d7493f..91734b4c0 100644 --- a/README.md +++ b/README.md @@ -39,317 +39,15 @@ Pick one from the [Releases](https://github.com/up9inc/mizu/releases) page. ## Prerequisites 1. Set `KUBECONFIG` environment variable to your Kubernetes configuration. If this is not set, Mizu assumes that configuration is at `${HOME}/.kube/config` -2. Mizu needs following permissions on your Kubernetes cluster to run +2. `mizu` assumes user running the command has permissions to create resources (such as pods, services, namespaces) on your Kubernetes cluster (no worries - `mizu` resources are cleaned up upon termination) -```yaml -- apiGroups: - - "" - resources: - - pods - verbs: - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete -- apiGroups: - - apps - resources: - - daemonsets - verbs: - - create - - patch - - delete -- apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services/proxy - verbs: - - get -``` +For detailed list of k8s permissions see [PERMISSIONS](PERMISSIONS.md) document -3. Optionally, for resolving traffic IP to Kubernetes service name, Mizu needs below permissions - -```yaml -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - apps - resources: - - daemonsets - verbs: - - create - - patch - - delete -- apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services/proxy - verbs: - - get -- apiGroups: - - "" - resources: - - serviceaccounts - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterroles - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterrolebindings - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - roles - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - verbs: - - get - - create - - delete -- apiGroups: - - apps - - extensions - resources: - - pods - verbs: - - get - - list - - watch -- apiGroups: - - apps - - extensions - resources: - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - - apps - - extensions - resources: - - endpoints - verbs: - - get - - list - - watch -``` - -4. Optionally, in order to use the policy rules validation feature, Mizu requires the following additional permissions: - -```yaml -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - create - - delete -``` - -5. Alternatively, in order to restrict Mizu to one namespace only (by setting `agent.namespace` in the config file), Mizu needs the following permissions in that namespace: - -```yaml -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services - verbs: - - get - - create - - delete -- apiGroups: - - apps - resources: - - daemonsets - verbs: - - get - - create - - patch - - delete -- apiGroups: - - "" - resources: - - services/proxy - verbs: - - get -``` - -6. To restrict Mizu to one namespace while also resolving IPs, Mizu needs the following permissions in that namespace: - -```yaml -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - "" - resources: - - services - verbs: - - get - - list - - watch - - create - - delete -- apiGroups: - - apps - resources: - - daemonsets - verbs: - - get - - create - - patch - - delete -- apiGroups: - - "" - resources: - - services/proxy - verbs: - - get -- apiGroups: - - "" - resources: - - serviceaccounts - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - roles - verbs: - - get - - create - - delete -- apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - verbs: - - get - - create - - delete -- apiGroups: - - apps - - extensions - resources: - - pods - verbs: - - get - - list - - watch -- apiGroups: - - apps - - extensions - resources: - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - - apps - - extensions - resources: - - endpoints - verbs: - - get - - list - - watch -``` - -See `examples/roles` for example `clusterroles`. ## How to Run 1. Find pods you'd like to tap to in your Kubernetes cluster -2. Run `mizu tap PODNAME` or `mizu tap REGEX` +2. Run `mizu tap` or `mizu tap PODNAME` 3. Open browser on `http://localhost:8899/mizu` **or** as instructed in the CLI .. 4. Watch the API traffic flowing .. 5. Type ^C to stop @@ -358,6 +56,23 @@ See `examples/roles` for example `clusterroles`. Run `mizu help` for usage options +To tap all pods in current namespace - +``` + $ kubectl get pods + NAME READY STATUS RESTARTS AGE + carts-66c77f5fbb-fq65r 2/2 Running 0 20m + catalogue-5f4cb7cf5-7zrmn 2/2 Running 0 20m + front-end-649fc5fd6-kqbtn 2/2 Running 0 20m + .. + + $ mizu tap + +carts-66c77f5fbb-fq65r + +catalogue-5f4cb7cf5-7zrmn + +front-end-649fc5fd6-kqbtn + Web interface is now available at http://localhost:8899 + ^C +``` + To tap specific pod - ```