mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-07-21 05:49:40 +00:00
Add encrypted networks
This commit is contained in:
125
docs/index.html
125
docs/index.html
@@ -178,6 +178,7 @@ grep '^# ' index.html | grep -v '<br' | tr '#' '-'
|
||||
- Deploying a local registry
|
||||
- Overlay networks
|
||||
- Breaking into an overlay network
|
||||
- Securing overlay networks
|
||||
|
||||
---
|
||||
|
||||
@@ -2601,6 +2602,130 @@ WHY?!?
|
||||
|
||||
---
|
||||
|
||||
# Securing overlay networks
|
||||
|
||||
- By default, overlay networks are using plain VXLAN encapsulation
|
||||
|
||||
(~Ethernet over UDP, using SwarmKit's control plane for ARP resolution)
|
||||
|
||||
- Encryption can be enabled on a per-network basis
|
||||
|
||||
(It will use IPSEC encryption provided by the kernel, leveraging hardware acceleration)
|
||||
|
||||
- This is only for the `overlay` driver
|
||||
|
||||
(Other drivers/plugins will use different mechanisms)
|
||||
|
||||
---
|
||||
|
||||
## Creating two networks: encrypted and not
|
||||
|
||||
- Let's create two networks for testing purposes
|
||||
|
||||
.exercise[
|
||||
|
||||
- Create an "insecure" network:
|
||||
```bash
|
||||
docker network create insecure --driver overlay --attachable
|
||||
```
|
||||
|
||||
- Create a "secure" network:
|
||||
```bash
|
||||
docker network create secure --opt encrypted --driver overlay --attachable
|
||||
```
|
||||
|
||||
]
|
||||
|
||||
.warning[Make sure that you don't typo that option; errors are silently ignored!]
|
||||
|
||||
---
|
||||
|
||||
## Deploying a web server sitting on both networks
|
||||
|
||||
- Let's use good old NGINX
|
||||
|
||||
- We will attach it to both networks
|
||||
|
||||
- We will use a placement constraint to make sure that it is on a different node
|
||||
|
||||
.exercise[
|
||||
|
||||
- Create a web server running somewhere else:
|
||||
```bash
|
||||
docker service create --name web \
|
||||
--network secure --network insecure \
|
||||
--constraint node.hostname!=node1 \
|
||||
nginx
|
||||
```
|
||||
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
## Sniff HTTP traffic
|
||||
|
||||
- We will use `ngrep`, which allows to grep for network traffic
|
||||
|
||||
- We will run it in a container (because we can!)
|
||||
|
||||
- We will use host networking to sniff the host's traffic
|
||||
|
||||
.exercise[
|
||||
|
||||
- Sniff network traffic and display all packets containing "HTTP":
|
||||
```bash
|
||||
docker run --net host nicolaka/netshoot ngrep -tpd eth0 HTTP
|
||||
```
|
||||
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
## Check that we are, indeed, sniffing traffic
|
||||
|
||||
- Let's see if we can intercept our traffic with Google!
|
||||
|
||||
.exercise[
|
||||
|
||||
- Open a new terminal
|
||||
|
||||
- Issue an HTTP request to Google (or anything you like):
|
||||
```bash
|
||||
curl google.com
|
||||
```
|
||||
|
||||
]
|
||||
|
||||
The ngrep container will display one `#` per packet traversing the network interface.
|
||||
|
||||
When you do the `curl`, you should see the HTTP request in clear text in the output.
|
||||
|
||||
---
|
||||
|
||||
## Try to sniff traffic across overlay networks
|
||||
|
||||
- We will run `curl web` through both secure and insecure networks
|
||||
|
||||
.exercise[
|
||||
|
||||
- Access the web server through the insecure network:
|
||||
```bash
|
||||
docker run --rm --net insecure nicolaka/netshoot curl web
|
||||
```
|
||||
|
||||
- Now do the same through the secure network:
|
||||
```bash
|
||||
docker run --rm --net secure nicolaka/netshoot curl web
|
||||
```
|
||||
|
||||
]
|
||||
|
||||
When you run the first command, you will see HTTP fragments.
|
||||
<br/>
|
||||
However, when you run the second one, only `#` will show up.
|
||||
|
||||
---
|
||||
|
||||
# Rolling updates
|
||||
|
||||
- We want to release a new version of the worker
|
||||
|
||||
Reference in New Issue
Block a user