Skip to content

Commit 7d80f75

Browse files
authored
Add Markdown linter GitHub action and fix lint issues detected by it (#225)
1 parent d62889c commit 7d80f75

File tree

5 files changed

+73
-27
lines changed

5 files changed

+73
-27
lines changed
Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: golangci-lint
1+
name: lint
22
on:
33
pull_request:
44
types:
@@ -11,9 +11,10 @@ permissions:
1111
contents: read
1212
# Optional: allow read access to pull request. Use with `only-new-issues` option.
1313
# pull-requests: read
14+
1415
jobs:
1516
golangci:
16-
name: lint
17+
name: golangci-lint
1718
runs-on: ubuntu-20.04
1819
steps:
1920
- uses: actions/setup-go@v3
@@ -54,3 +55,17 @@ jobs:
5455

5556
# Optional: if set to true then the action don't cache or restore ~/.cache/go-build.
5657
# skip-build-cache: true
58+
59+
markdownlint:
60+
name: Check for Markdown errors
61+
runs-on: ubuntu-latest
62+
63+
steps:
64+
- uses: actions/checkout@v4
65+
66+
# Tip: run the markdown lint action locally with '--fix' to automatically fix some of the issues:
67+
# docker run -v $PWD:/workdir ghcr.io/igorshubovych/markdownlint-cli:latest "**/*.md" --fix
68+
- uses: articulate/actions-markdownlint@v1
69+
with:
70+
config: .markdownlint.json
71+
files: '**/*.md'

.markdownlint.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"default": true,
3+
"MD013": false,
4+
"MD033": false
5+
}

CODE_OF_CONDUCT.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
5555
## Enforcement
5656

5757
Instances of abusive, harassing, or otherwise unacceptable behavior may be
58-
reported by contacting the project team at help@otterize.com. All
58+
reported by contacting the project team at <help@otterize.com>. All
5959
complaints will be reviewed and investigated and will result in a response that
6060
is deemed necessary and appropriate to the circumstances. The project team is
6161
obligated to maintain confidentiality with regard to the reporter of an incident.
@@ -68,9 +68,9 @@ members of the project's leadership.
6868
## Attribution
6969

7070
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71-
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
71+
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
7272

7373
[homepage]: https://www.contributor-covenant.org
7474

7575
For answers to common questions about this code of conduct, see
76-
https://www.contributor-covenant.org/faq
76+
<https://www.contributor-covenant.org/faq>

README.md

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Otterize network mapper
22

3-
<img title="Otter Manning Helm" src="./otterhelm.png" width=200 />
4-
3+
<img title="Otter Manning Helm" src="./otterhelm.png" width=200 alt="logo" />
54

65
![build](https://github.com/otterize/network-mapper/actions/workflows/build.yaml/badge.svg)
76
[![Go Report Card](https://goreportcard.com/badge/github.com/otterize/network-mapper/src)](https://goreportcard.com/report/github.com/otterize/network-mapper/src)
@@ -20,11 +19,10 @@ Maps pod-to-pod traffic, pod-to-Internet traffic, and even AWS IAM traffic, with
2019
* [Contributing](#contributing)
2120
* [Slack](#slack)
2221

23-
24-
https://user-images.githubusercontent.com/20886410/205926414-a5fb6755-b5fa-45f3-9b15-d4f867547836.mp4
25-
22+
<https://user-images.githubusercontent.com/20886410/205926414-a5fb6755-b5fa-45f3-9b15-d4f867547836.mp4>
2623

2724
## About
25+
2826
The Otterize network mapper is a zero-config tool that aims to be lightweight and doesn't require you to adapt anything in your cluster. Its goal is to give you insights about traffic in your cluster without a complete overhaul or the need to adapt anything to it, unlike other solutions, which may require deploying a new CNI, a service mesh, and so on.
2927

3028
You can use the [Otterize CLI](https://github.com/otterize/otterize-cli) to list the traffic by client, visualize the traffic, export the results as JSON or YAML, or reset the traffic the mapper remembers.
@@ -35,8 +33,8 @@ Example output after running `otterize network-mapper visualize` on the [Google
3533
The same microservices demo in the [Otterize Cloud](https://otterize.com/cloud-beta) access graph, as it appears when you choose to connect the network mapper to Otterize Cloud:
3634
![image](cloud-example.png)
3735

38-
3936
Example output after running `otterize network-mapper list` on the Google Cloud microservices demo:
37+
4038
```bash
4139
cartservice in namespace otterize-ecom-demo calls:
4240
- redis-cart
@@ -60,99 +58,124 @@ loadgenerator in namespace otterize-ecom-demo calls:
6058
recommendationservice in namespace otterize-ecom-demo calls:
6159
- productcatalogservice
6260
```
63-
61+
6462
## Try the network mapper
6563

6664
Try the [quickstart](https://docs.otterize.com/quick-tutorials/k8s-network-mapper) to get a hands-on experience in 5 minutes.
6765

6866
Looking to map AWS traffic? Check out the [AWS visibility tutorial](https://docs.otterize.com/features/aws-iam/tutorials/aws-visibility).
6967

7068
## Installation instructions
69+
7170
### Install and run the network mapper using Helm
71+
7272
```bash
7373
helm repo add otterize https://helm.otterize.com
7474
helm repo update
7575
helm install network-mapper otterize/network-mapper -n otterize-system --create-namespace --wait
7676
```
77+
7778
### Install Otterize CLI to query data from the network mapper
79+
7880
Mac
81+
7982
```bash
8083
brew install otterize/otterize/otterize-cli
8184
```
85+
8286
Linux 64-bit
87+
8388
```bash
8489
wget https://get.otterize.com/otterize-cli/v1.0.5/otterize_linux_x86_64.tar.gz
8590
tar xf otterize_linux_x86_64.tar.gz
8691
sudo cp otterize /usr/local/bin
8792
```
93+
8894
Windows
95+
8996
```bash
9097
scoop bucket add otterize-cli https://github.com/otterize/scoop-otterize-cli
9198
scoop update
9299
scoop install otterize-cli
93100
```
101+
94102
For more platforms, see [the installation guide](https://docs.otterize.com/installation#install-the-otterize-cli).
95103

96104
### Components
97-
- Mapper - the mapper is deployed once per cluster, and receives traffic information from the sniffer and watchers, and resolves the information to communications between [service identities](https://docs.otterize.com/reference/service-identities).
98-
- Sniffer - the sniffer is deployed to each node using a DaemonSet, and is responsible for capturing node-local DNS traffic and inspecting open connections.
99-
- Kafka watcher - the Kafka watcher is deployed once per cluster and is responsible for detecting accesses to Kafka topics, which services perform those accesses and which operations they use.
100-
- Istio watcher - the Istio watcher is part of the Mapper and queries Istio Envoy sidecars for HTTP traffic statistics, which are used to detect HTTP traffic with paths. Currently, the Istio watcher has a limitation where it reports all HTTP traffic seen by the sidecar since it was started, regardless of when it was seen.
101-
- AWS IAM visibility - The AWS IAM visibility components are optionally deployed with `--set aws.visibility.enabled=true`. Label pods with `network-mapper.otterize.com/aws-visibility: true`, and if connected to Otterize Cloud, the Cloud will combine the information to put together a map of accesses to AWS resources, which you can export as ClientIntents yamls for use with the (Intents Operator)[https://github.com/otterize/intents-operator].
105+
106+
* Mapper - the mapper is deployed once per cluster, and receives traffic information from the sniffer and watchers, and resolves the information to communications between [service identities](https://docs.otterize.com/reference/service-identities).
107+
* Sniffer - the sniffer is deployed to each node using a DaemonSet, and is responsible for capturing node-local DNS traffic and inspecting open connections.
108+
* Kafka watcher - the Kafka watcher is deployed once per cluster and is responsible for detecting accesses to Kafka topics, which services perform those accesses and which operations they use.
109+
* Istio watcher - the Istio watcher is part of the Mapper and queries Istio Envoy sidecars for HTTP traffic statistics, which are used to detect HTTP traffic with paths. Currently, the Istio watcher has a limitation where it reports all HTTP traffic seen by the sidecar since it was started, regardless of when it was seen.
110+
* AWS IAM visibility - The AWS IAM visibility components are optionally deployed with `--set aws.visibility.enabled=true`. Label pods with `network-mapper.otterize.com/aws-visibility: true`, and if connected to Otterize Cloud, the Cloud will combine the information to put together a map of accesses to AWS resources, which you can export as ClientIntents yamls for use with the [Intents Operator](https://github.com/otterize/intents-operator).
102111

103112
### DNS responses
113+
104114
DNS is a common network protocol used for service discovery. When a pod (`checkoutservice`) tries to connect to a Kubernetes service
105115
(`orderservice`) or another pod, a DNS query is sent out. The network mapper watches DNS responses and extracts the IP addresses, which are used for the [service identity resolving process](https://docs.otterize.com/reference/service-identities).
106116

107117
### Active TCP connections
118+
108119
DNS responses will only appear when new connections are opened. To handle long-lived connections, the network mapper also queries open TCP connections in a manner similar to `netstat` or `ss`. The IP addresses are used for the [service identity resolving process](https://docs.otterize.com/reference/service-identities), as above.
109120

110121
### Kafka logs
122+
111123
The Kafka watcher periodically examines logs of Kafka servers provided by the user through configuration, parses them and deduces topic-level access to Kafka from pods in the cluster.
112124
The watcher is only able to parse Kafka logs when Kafka servers' Authorizer logger is configured to output logs to `stdout` with `DEBUG` level.
113125

114126
### Istio sidecar metrics
127+
115128
The Istio watcher, part of the Network mapper periodically queries for all pods with the `security.istio.io/tlsMode` label, queries each pod's Istio sidecar for metrics about connections, and deduces connections with HTTP paths between pods covered by the Istio service mesh.
116129

117130
### AWS IAM visibility
131+
118132
AWS IAM visibility consists of several components: a HTTP proxy that proxies AWS traffic for pods which you opt-in on using the label `network-mapper.otterize.com/aws-visibility: true`, a webhook admission controller that patches Pods with that label as they are admitted to add a certificate for the HTTP proxy and direct DNS traffic for amazonaws.com to a DNS server belonging to the network mapper, and finally said DNS server which responds only to amazonaws.com requests and forwards the rest to the cluster's DNS server.
119133

120134
### Service name resolution
135+
121136
Service names are resolved in one of two ways:
137+
122138
1. If an `otterize/service-name` label is present, that name is used.
123139
2. If not, a recursive look-up is performed for the Kubernetes resource owner for a pod until the root is reached.
124-
For example, if you have a `Deployment` named `client`, which then creates and owns a `ReplicaSet`,
140+
For example, if you have a `Deployment` named `client`, which then creates and owns a `ReplicaSet`,
125141
which then creates and owns a `Pod`, then the service name for that pod is `client` - same as the name of the `Deployment`.
126142
The goal is to generate a mapping that speaks in the same language that dev teams use.
127143

128144
## Exporting a network map
145+
129146
The network mapper continuously builds a map of pod to pod communication in the cluster. The map can be exported at any time in either JSON or YAML formats with the Otterize CLI.
130147

131148
The YAML export is formatted as `ClientIntents` Kubernetes resource files. Client intents files can be consumed by the [Otterize intents operator](https://github.com/otterize/intents-operator) to configure pod-to-pod access with network policies, or Kafka client access with Kafka ACLs and mTLS.
132149

133150
## Learn more
151+
134152
Explore our [documentation](https://docs.otterize.com/) site to learn how to:
135-
- [Map pod-to-pod communication](https://docs.otterize.com/quick-tutorials/k8s-network-mapper).
136-
- [Automate network policies](https://docs.otterize.com/quick-tutorials/k8s-network-policies).
137-
- And more...
153+
154+
* [Map pod-to-pod communication](https://docs.otterize.com/quick-tutorials/k8s-network-mapper).
155+
* [Automate network policies](https://docs.otterize.com/quick-tutorials/k8s-network-policies).
156+
* And more...
138157

139158
## Contributing
159+
140160
1. Feel free to fork and open a pull request! Include tests and document your code in [Godoc style](https://go.dev/blog/godoc)
141161
2. In your pull request, please refer to an existing issue or open a new one.
142162
3. See our [Contributor License Agreement](https://github.com/otterize/cla/).
143163

144164
## Slack
165+
145166
To join the conversation, ask questions, and engage with other users, join the Otterize Slack!
146-
167+
147168
[![button](https://i.ibb.co/vwRP6xK/Group-3090-2.png)](https://joinslack.otterize.com)
148169

149170
## Usage telemetry
171+
150172
The mapper reports anonymous usage information back to the Otterize team, to help the team understand how the software is used in the community and what aspects users find useful. No personal or organizational identifying information is transmitted in these metrics: they only reflect patterns of usage. You may opt out at any time through a single configuration flag.
151173

152174
To **disable** sending usage information:
153-
- Via the Otterize OSS Helm chart: `--set global.telemetry.enabled=false`.
154-
- Via an environment variable: `OTTERIZE_TELEMETRY_ENABLED=false`.
155-
- If running a mapper directly: `--telemetry-enabled=false`.
175+
176+
* Via the Otterize OSS Helm chart: `--set global.telemetry.enabled=false`.
177+
* Via an environment variable: `OTTERIZE_TELEMETRY_ENABLED=false`.
178+
* If running a mapper directly: `--telemetry-enabled=false`.
156179

157180
If the `telemetry` flag is omitted or set to `true`, telemetry will be enabled: usage information will be reported.
158181

src/shared/testbase/README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
# Testing instructions
2+
13
In order to run the tests locally, “envtest” requires some k8s binaries. To install them, run once:
2-
```
4+
5+
```shell
36
go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
47
source <(setup-envtest use -p env)
58
sudo mkdir -p /usr/local/kubebuilder
69
sudo ln -s "$KUBEBUILDER_ASSETS" /usr/local/kubebuilder/bin
7-
```
10+
```

0 commit comments

Comments
 (0)