9.6 網路隔離

Docker 網路提供了天然的隔離能力,不同網路之間的容器預設無法通訊。這是 Docker 網路安全的重要基礎。

9.6.1 網路隔離原理

不同網路之間預設隔離,容器只能與同一網路中的容器直接通訊:

## 建立兩個網路

$ docker network create frontend
$ docker network create backend

## 容器 A 在 frontend

$ docker run -d --name web --network frontend nginx

## 容器 B 在 backend

$ docker run -d --name db --network backend postgres

## web 無法直接訪問 db(不同網路)

$ docker exec web ping db
ping: db: Name or service not known

9.6.2 安全優勢

這種隔離機制帶來以下安全優勢:

場景 說明
前後端分離 前端容器無法直接訪問資料庫網路
微服務隔離 不同微服務組可以使用不同網路
多租戶 不同租戶的容器在不同網路中完全隔離
最小許可權 容器只能訪問必要的網路資源

9.6.3 跨網絡通訊

如果確實需要某個容器跨網絡通訊,可以將其同時連線到多個網路:

## 建立一個中間件容器,連線到兩個網路

$ docker run -d --name api --network frontend myapi
$ docker network connect backend api

## 現在 api 容器既可以訪問 frontend 中的 web,也可以訪問 backend 中的 db

這種方式讓你可以精確控制哪些容器可以跨網絡通訊,遵循最小許可權原則。

9.6.4 典型網路架構

一個典型的多層應用網路架構如下:

graph TD subgraph FrontendNet ["frontend 網路"] LB["負載均衡器"] Web1["Web 伺服器 1"] Web2["Web 伺服器 2"] end subgraph BackendNet ["backend 網路"] API["API 伺服器"] DB["資料庫"] Cache["Redis 快取"] end LB --> Web1 LB --> Web2 Web1 -.-> API Web2 -.-> API API --> DB API --> Cache

在這種架構中,API 伺服器同時連線到 frontendbackend 網路,充當兩個網路之間的橋樑。負載均衡器和 Web 伺服器無法直接訪問資料庫,增強了安全性。

第 80 页,共 196 页
使用 mdPress 构建