← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-mesh
Spuštění Mesh v Dockeru / Kubernetes
cloudflare/mesh ↗ Docker image balí uzel Cloudflare Mesh pro linuxové kontejnery. V klientovi Cloudflare One Client spouští warp-svc démon bez uživatelského rozhraní v minimální Wolfi ↗-ový runtime.
Pomocí kontejnerového image přidejte uzly Mesh do Docker Compose stacků, Kubernetes clusterů a CI/CD pipelines, aniž byste museli instalovat balíčky na hostitele.
Podporované architektury
latest tag je multiplatformní manifest. Docker automaticky vybere obraz odpovídající architektuře hostitele.
| Architektura | Štítek |
|---|---|
| Multi-arch | latest |
| x86-64 | latest-amd64 |
| ARM64 | latest-arm64 |
Předpoklady
Než kontejner spustíte, vytvořte uzel Mesh a zkopírujte si jeho token.
-
V Cloudflare dashboardu přejděte na Sítě > Mesh.
Přejděte na Mesh ↗ -
Vyberte Přidejte uzel.
-
Zadejte název uzlu (například
k8s-gatewaynebodocker-agent). -
Vyberte Vytvořit uzel.
-
Zkopírujte token zobrazený v dashboardu. Předáte ho kontejneru jako
MESH_NODE_TOKEN.
Vytvořte uzel přes Cloudflare API:
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/warp_connector" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" \
-d '{"name": "k8s-gateway"}'Poté načtěte token:
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/warp_connector/{node_id}/token" \
-H "Authorization: Bearer {api_token}"Odpověď obsahuje řetězec tokenu. Předejte ho kontejneru jako MESH_NODE_TOKEN.
Pokud jde o váš první uzel Mesh, dashboard spustí průvodce nastavením která nakonfiguruje váš účet pro síť Mesh.
Nasaďte pomocí Docker Compose
Docker Compose je doporučený způsob, jak spustit Mesh node vedle vašich aplikačních služeb. Přidejte cloudflare-mesh službu do vaší compose.yaml:
services:
cloudflare-mesh:
image: cloudflare/mesh:latest
container_name: cloudflare-mesh
cap_add:
- NET_ADMIN
- NET_RAW
devices:
- /dev/net/tun:/dev/net/tun
environment:
MESH_NODE_TOKEN: ${MESH_NODE_TOKEN}
SRCNAT_ENABLED: "true"
sysctls:
net.ipv4.ip_forward: "1"
net.ipv6.conf.all.forwarding: "1"
net.ipv6.conf.default.forwarding: "1"
volumes:
- mesh_data:/var/lib/cloudflare-warp
restart: unless-stopped
volumes:
mesh_data:Spusťte stack:
MESH_NODE_TOKEN="<YOUR-TOKEN>" docker compose up -dOvěřte, že je uzel připojen:
docker exec cloudflare-mesh warp-cli statusNasaďte pomocí Docker CLI
Pro samostatný kontejner bez Compose:
docker run -d \
--name cloudflare-mesh \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--device /dev/net/tun \
--sysctl net.ipv4.ip_forward=1 \
--sysctl net.ipv6.conf.all.forwarding=1 \
--sysctl net.ipv6.conf.default.forwarding=1 \
-e MESH_NODE_TOKEN="$MESH_NODE_TOKEN" \
-e SRCNAT_ENABLED=true \
-v mesh_data:/var/lib/cloudflare-warp \
--restart unless-stopped \
cloudflare/mesh:latestNasaďte na Kubernetes
Tento příklad vytvoří jednu repliku StatefulSet s trvalým stavem registrace. Vyžaduje cluster Kubernetes, který umožňuje NET_ADMIN, NET_RAW, a /dev/net/tun přístup k hostiteli (například GKE Standard).
1. Vytvořte token Secret
kubectl create secret generic cloudflare-mesh \
--from-literal=MESH_NODE_TOKEN="$MESH_NODE_TOKEN"2. Použijte manifest
Uložte následující jako cloudflare-mesh.yaml:
apiVersion: v1
kind: Service
metadata:
name: cloudflare-mesh
spec:
clusterIP: None
selector:
app: cloudflare-mesh
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: cloudflare-mesh
spec:
serviceName: cloudflare-mesh
replicas: 1
selector:
matchLabels:
app: cloudflare-mesh
template:
metadata:
labels:
app: cloudflare-mesh
spec:
containers:
- name: mesh
image: cloudflare/mesh:latest
env:
- name: MESH_NODE_TOKEN
valueFrom:
secretKeyRef:
name: cloudflare-mesh
key: MESH_NODE_TOKEN
- name: SRCNAT_ENABLED
value: "true"
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
volumeMounts:
- name: warp-data
mountPath: /var/lib/cloudflare-warp
- name: dev-net-tun
mountPath: /dev/net/tun
volumes:
- name: dev-net-tun
hostPath:
path: /dev/net/tun
type: CharDevice
volumeClaimTemplates:
- metadata:
name: warp-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi3. Ověřte uzel
kubectl apply -f cloudflare-mesh.yaml
kubectl rollout status statefulset/cloudflare-mesh
kubectl exec cloudflare-mesh-0 -- warp-cli status PersistentVolumeClaim zachovává registraci Mesh napříč restarty Podů.
Kubernetes sidecar
Chcete-li připojit kontejner aplikace k Mesh, přidejte image Mesh jako sidecar do stejného Podu. Kontejnery ve stejném Podu sdílí network namespace, takže sidecar Mesh připojí aplikaci ke Cloudflare bez jakýchkoli změn aplikace.
1. Vytvořte token Secret
Vytvořte samostatný uzel Mesh a Kubernetes Secret pro sidecar:
kubectl create secret generic cloudflare-mesh-sidecar \
--from-literal=MESH_NODE_TOKEN="$MESH_NODE_TOKEN"2. Použijte manifest
Uložte následující jako cloudflare-mesh-sidecar.yaml:
apiVersion: v1
kind: Service
metadata:
name: cloudflare-mesh-sidecar-headless
spec:
clusterIP: None
selector:
app: cloudflare-mesh-sidecar
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: cloudflare-mesh-sidecar
spec:
serviceName: cloudflare-mesh-sidecar-headless
replicas: 1
selector:
matchLabels:
app: cloudflare-mesh-sidecar
template:
metadata:
labels:
app: cloudflare-mesh-sidecar
spec:
containers:
- name: application
image: busybox:1.37.0
command:
- sh
- -c
- |
echo "Hello from the Kubernetes sidecar example" > /tmp/index.html
httpd -f -p 8080 -h /tmp
ports:
- name: http
containerPort: 8080
- name: mesh
image: cloudflare/mesh:latest
env:
- name: MESH_NODE_TOKEN
valueFrom:
secretKeyRef:
name: cloudflare-mesh-sidecar
key: MESH_NODE_TOKEN
- name: SRCNAT_ENABLED
value: "true"
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
volumeMounts:
- name: warp-data
mountPath: /var/lib/cloudflare-warp
- name: dev-net-tun
mountPath: /dev/net/tun
volumes:
- name: dev-net-tun
hostPath:
path: /dev/net/tun
type: CharDevice
volumeClaimTemplates:
- metadata:
name: warp-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: cloudflare-mesh-sidecar
spec:
selector:
app: cloudflare-mesh-sidecar
ports:
- name: http
port: 8080
targetPort: http3. Ověřte sidecar
kubectl apply -f cloudflare-mesh-sidecar.yaml
kubectl rollout status statefulset/cloudflare-mesh-sidecar
kubectl exec cloudflare-mesh-sidecar-0 -c mesh -- warp-cli statusKonfigurace za běhu
| Parametr | Popis |
|---|---|
MESH_NODE_TOKEN |
Povinné pro počáteční registraci. Token vytvořte v části Sítě > Mesh v Cloudflare dashboard ↗, nebo přes API. |
SRCNAT_ENABLED |
Řídí source NAT. Výchozí hodnota je true. Přijímá true, false, 1, nebo 0. |
/var/lib/cloudflare-warp |
Ukládá stav registrace. Tuto cestu zachovejte pomocí volume, aby identita Mesh zůstala stabilní i při opětovném vytváření kontejnerů. |
Požadované funkce a zařízení
| Schopnost / zařízení | Proč je to potřeba |
|---|---|
NET_ADMIN |
Vytvoří a nakonfiguruje rozhraní tunelu, směrování a pravidla nftables. |
NET_RAW |
Povoluje operace s raw sockety, jako je ICMP. Docker tuto schopnost obvykle uděluje ve výchozím nastavení, ale zde je uvedena explicitně. |
/dev/net/tun |
Vytvoří rozhraní WARP TUN. |
| Sysctly pro přeposílání IP | Požadováno, pokud uzel předává provoz pro směrované podsítě. |
Zdrojový NAT
Zdrojový NAT (maskování) je ve výchozím nastavení povolený (SRCNAT_ENABLED=true). Když uzel Mesh přijme provoz z edge sítě Cloudflare a přepošle ho na cíl v lokální síti, přeloží zdrojovou IP adresu z adresy Mesh CGNAT (100.96.x.x) na vlastní IP adresu místního rozhraní uzlu. Tím se zajistí, že se zpětný provoz směruje správně, aniž by bylo nutné mít statické trasy ve vaší síti VPC nebo v místní síti.
Nastavte SRCNAT_ENABLED=false pouze pokud připojené sítě již mají zpáteční trasy do rozsahu IP adres Mesh (100.96.0.0/12). Další podrobnosti o směrování zpětného provozu najdete v Trasy.
Vysoká dostupnost na Kubernetes
Pro vysoká dostupnost s trasami CIDR:
- Použijte stejný token uzlu Mesh napříč všemi replikami.
- Přidělte každému Podu vlastní
PersistentVolumeClaim.
Cloudflare provozuje repliky v režimu active-passive. Pokud aktivní replika přestane být dostupná, provoz se automaticky přepne na záložní repliku. Jediná replika žádnou redundanci neposkytuje.
Trasy hostname
Kontejnery podporují směrování hostname. Chcete-li překládat Kubernetes Services přes trasu hostname, ujistěte se, že hostname odpovídá skutečné příponě DNS clusteru. Výchozí hodnota je cluster.local, což vytváří názvy Service jako service.namespace.svc.cluster.local.
Site-to-site networking
Nasaďte samostatný kontejner uzlu Mesh na každé pobočce se samostatným tokenem uzlu pro každou identitu uzlu. Každý uzel by měl inzerovat svou lokálně dostupnou podsíť jako Trasa CIDR. Nakonfigurujte router nebo úlohy dané pobočky tak, aby odesílaly provoz pro vzdálenou podsíť přes lokální uzel Mesh.
S SRCNAT_ENABLED=true, cíle vidí lokální adresu uzlu Mesh. Pokud je source NAT vypnutý, připojené sítě vyžadují zpětné trasy přes své uzly Mesh.
Řešení potíží
Uzel se registruje jako běžné zařízení Cloudflare One Client
Ověřte, že je správný token uzlu Mesh nastaven v MESH_NODE_TOKEN. Existující stav registrace v trvalém svazku (persistent volume) má přednost. Svazek odstraňte pouze tehdy, když chcete danou registraci záměrně zahodit a vytvořit novou identitu.
warp-cli status zůstává ve stavu Connecting
Zkontrolujte token, profil zařízení, proxy Gateway, konfiguraci Split Tunnel, konektivitu odchozího firewallu a protokoly kontejnerů:
docker logs cloudflare-meshKubernetes Service nelze přeložit
Ověřte, že trasa hostname odpovídá skutečné příponě DNS daného clusteru. Obvyklá výchozí hodnota je cluster.local, což vytváří názvy Service, jako například service.namespace.svc.cluster.local.
Dorazí požadavek na hostname, ale nevrátí se žádná odpověď
Nejprve zkontrolujte source NAT a návratové směrování. Ověřte SRCNAT_ENABLED je nastaveno na true nebo že vaše síť má zpáteční trasy do rozsahu IP adres Mesh.
Zkontrolujte stav uzlu
docker exec -it cloudflare-mesh warp-cli statuskubectl exec cloudflare-mesh-0 -- warp-cli statusDalší kroky
- Přidání tras : Zpřístupněte podsítě za kontejnerizovaným uzlem libovolnému zařízení ve vaší síti Mesh.
- Povolte vysokou dostupnost : Spusťte více replik pro odolnost produkčního prostředí.
- Připojení z Workers : Pro přístup k privátním službám z Cloudflare Workers použijte vazby VPC Network.
- Tipy a osvědčené postupy : Konfigurace cloudové VPC, ladění MTU a provoz společně s Cloudflare Tunnel.