← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-tunnel / deployment-guides
Kubernetes
Kubernetes ↗ je nástroj pro orchestraci kontejnerů, který slouží k nasazování aplikací na fyzické nebo virtuální počítače, škálování nasazení podle nároků provozu a nasazování aktualizací bez výpadku. Cluster Kubernetes, tedy prostředí, ve kterém instance aplikace běží, je interně propojen prostřednictvím privátní sítě. Můžete nainstalovat cloudflared démon uvnitř clusteru Kubernetes, aby propojil aplikace uvnitř clusteru s Cloudflare.
Tento návod popisuje, jak zpřístupnit službu Kubernetes veřejnému internetu pomocí vzdáleně spravovaný Cloudflare Tunnel. Pro účely tohoto příkladu nasadíme jednoduchou webovou aplikaci vedle cloudflared v Google Kubernetes Engine (GKE). Stejné principy platí pro jakékoli jiné prostředí Kubernetes (například minikube, kubeadm, nebo cloudová služba Kubernetes), kde cloudflared se může připojit k síti Cloudflare.
Architektura
Jak ukazuje diagram, doporučujeme nastavit cloudflared jako sousední nasazení ↗ k nasazením aplikace. Mít samostatné nasazení Kubernetes pro cloudflared umožňuje škálovat cloudflared nezávisle na aplikaci. V cloudflared nasazení můžete spustit více replik se stejným Cloudflare Tunnel, není nutné vytvářet vyhrazený tunel pro každý cloudflared podu. Každý cloudflared replika / pod má přístup ke všem službám Kubernetes v clusteru.
Jakmile je cluster připojen ke Cloudflare, můžete nakonfigurovat trasy Cloudflare Tunnel a řídit, jak cloudflared bude proxovat provoz do služeb v rámci clusteru. Můžete tak například zveřejnit určité aplikace Kubernetes na Internetu a jiné aplikace omezit pouze na interní uživatele Cloudflare One Client.
Předpoklady
Chcete-li dokončit následující postup, budete potřebovat:
1. Vytvořte cluster GKE
Chcete-li vytvořit nový cluster Kubernetes v Google Cloud:
-
Otevřete Google Cloud ↗ a přejděte na Kubernetes Engine.
-
V Klastry, vyberte Vytvořit.
-
Pojmenujte cluster. V tomto příkladu jej pojmenujeme
cloudflare-tunnel. -
(Volitelné) Zvolte požadovaný region a další specifikace clusteru. V tomto příkladu použijeme výchozí specifikace.
-
Vyberte Vytvořit.
-
Chcete-li se připojit ke clusteru:
- Vyberte nabídku tří teček.
- Vyberte Připojit.
- Vyberte Spuštění v Cloud Shellu a otevřít terminál v prohlížeči.
- Vyberte Autorizovat.
- Stiskněte
Entera spustit předvyplněnýgcloudpříkazu. - (Doporučeno) V nabídce Cloud Shell vyberte Otevřít editor a spustit vestavěné IDE.
-
V terminálu Cloud Shell spusťte následující příkaz pro kontrolu stavu clusteru:
kubectl get allNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 15m
2. Vytvořte pody pro webovou aplikaci
Pod představuje instanci běžícího procesu v clusteru. V tomto příkladu nasadíme httpbin ↗ aplikaci se dvěma pody a zpřístupněte pody uvnitř clusteru na adrese httpbin-service:80.
-
Vytvořte složku pro soubory manifestu Kubernetes:
mkdir tunnel-example -
Přejděte do adresáře:
cd tunnel-example -
V
tunnel-exampleadresáři vytvořte nový soubor s názvemhttpbin.yaml. Tento soubor definuje nasazení Kubernetes pro aplikaci httpbin.httpbin.yamlapiVersion: apps/v1 kind: Deployment metadata: name: httpbin-deployment namespace: default spec: replicas: 2 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin spec: containers: - name: httpbin image: kennethreitz/httpbin:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 -
Vytvořte nový
httpbinsvc.yamlsoubor. Tento soubor definuje Kubernetes službu, která ostatním aplikacím v clusteru (napříkladcloudflared) pro přístup k sadě podů httpbin.httpbinsvc.yamlapiVersion: v1 kind: Service metadata: name: httpbin-service namespace: default spec: type: LoadBalancer selector: app: httpbin ports: - port: 80 targetPort: 80 -
Pomocí následujícího příkazu spusťte aplikaci uvnitř clusteru:
kubectl create -f httpbin.yaml -f httpbinsvc.yaml -
Zkontrolujte stav svého nasazení:
kubectl get allNAME READY STATUS RESTARTS AGE pod/httpbin-deployment-bc6689c5d-b5ftk 1/1 Running 0 79s pod/httpbin-deployment-bc6689c5d-cbd9m 1/1 Running 0 79s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/httpbin-service LoadBalancer 34.118.225.147 34.75.201.60 80:31967/TCP 79s service/kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 24h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/httpbin-deployment 2/2 2 2 79s NAME DESIRED CURRENT READY AGE replicaset.apps/httpbin-deployment-bc6689c5d 2 2 2 79s
3. Vytvořte tunel
Chcete-li vytvořit Cloudflare Tunnel:
V Cloudflare dashboard, přejděte na Sítě > Tunnels.
Vyberte Vytvořit tunel.
Zadejte název tunelu (například
gke-tunnel).Vyberte Create Tunnel.
Zvolte svůj operační systém a vyberte Docker.
Aplikace musí být zabaleny do kontejnerizovaného obrazu, než je možné je spustit v Kubernetes. Proto použijeme
cloudflaredImage Docker kontejneru pro nasazení tunelu v Kubernetes.Namísto spuštění instalačního příkazu zkopírujte pouze hodnotu tokenu, ne celý příkaz. Hodnota tokenu má tvar
eyJhIjoiNWFiNGU5Z...Token budete potřebovat pro manifestový soubor Kubernetes.
Ponechte kartu prohlížeče s Cloudflare Tunnel otevřenou, zatímco se zaměříme na nasazení Kubernetes.
4. Uložte token tunelu
cloudflared používá token tunelu ke spuštění vzdáleně spravovaného Cloudflare Tunnel. Token tunelu můžete uložit do Kubernetes secret ↗.
-
V GKE Cloud Shell vytvořte
tunnel-token.yamlsoubor s následujícím obsahem. Nezapomeňte nahradit<YOUR_TUNNEL_TOKEN>s tokenem vašeho tunelu (eyJhIjoiNWFiNGU5Z...).tunnel-token.yamlapiVersion: v1 kind: Secret metadata: name: tunnel-token stringData: token: <YOUR_TUNNEL_TOKEN> -
Vytvořte secret:
kubectl create -f tunnel-token.yaml -
Zkontrolujte nově vytvořený secret:
kubectl get secretsNAME TYPE DATA AGE tunnel-token Opaque 1 100s
5. Vytvořte pody pro cloudflared
Chcete-li spustit Cloudflare Tunnel v Kubernetes:
-
Vytvořte nasazení Kubernetes pro vzdáleně spravovaný Cloudflare Tunnel:
tunnel.yamlapiVersion: apps/v1 kind: Deployment metadata: name: cloudflared-deployment namespace: default spec: replicas: 2 selector: matchLabels: pod: cloudflared template: metadata: labels: pod: cloudflared spec: securityContext: sysctls: # Allows ICMP traffic (ping, traceroute) to resources behind cloudflared. - name: net.ipv4.ping_group_range value: "65532 65532" containers: - image: cloudflare/cloudflared:latest name: cloudflared env: # Defines an environment variable for the tunnel token. - name: TUNNEL_TOKEN valueFrom: secretKeyRef: name: tunnel-token key: token command: # Configures tunnel run parameters - cloudflared - tunnel - --no-autoupdate - --loglevel - info - --metrics - 0.0.0.0:2000 - run livenessProbe: httpGet: # Cloudflared has a /ready endpoint which returns 200 if and only if # it has an active connection to Cloudflare's network. path: /ready port: 2000 failureThreshold: 1 initialDelaySeconds: 10 periodSeconds: 10 -
Nasadit
cloudflareddo clusteru:kubectl create -f tunnel.yamlKubernetes nainstaluje
cloudflaredimage na dvou podech a spusťte tunel pomocí příkazucloudflared tunnel --no-autoupdate --loglevel info --metrics 0.0.0.0:2000 run.cloudflarednačte token tunelu zeTUNNEL_TOKENproměnná prostředí. -
Zkontrolujte stav svého clusteru:
kubectl get allNAME READY STATUS RESTARTS AGE pod/cloudflared-deployment-6d5f9f9666-85l5w 1/1 Running 0 21s pod/cloudflared-deployment-6d5f9f9666-wb96x 1/1 Running 0 21s pod/httpbin-deployment-bc6689c5d-b5ftk 1/1 Running 0 3m36s pod/httpbin-deployment-bc6689c5d-cbd9m 1/1 Running 0 3m36s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/httpbin-service LoadBalancer 34.118.225.147 34.75.201.60 80:31967/TCP 3m36s service/kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 24h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cloudflared-deployment 2/2 2 2 22s deployment.apps/httpbin-deployment 2/2 2 2 3m37s NAME DESIRED CURRENT READY AGE replicaset.apps/cloudflared-deployment-6d5f9f9666 2 2 2 22s replicaset.apps/httpbin-deployment-bc6689c5d 2 2 2 3m37s
Měli byste vidět dva cloudflared pody a dva httpbin pody s Running stavu. Pokud váš cloudflared pody se neustále restartují, zkontrolujte command syntaxi v tunnel.yaml a ujistěte se, že parametry spuštění tunelu jsou ve správném pořadí.
6. Ověřte stav tunelu
Chcete-li vypsat protokoly pro cloudflared instance:
kubectl logs pod/cloudflared-deployment-6d5f9f9666-85l5w2025-06-11T22:00:47Z INF Starting tunnel tunnelID=64c359b6-e111-40ec-a3a9-199c2a656613
2025-06-11T22:00:47Z INF Version 2025.6.0 (Checksum 72f233bb55199093961bf099ad62d491db58819df34b071ab231f622deff33ce)
2025-06-11T22:00:47Z INF GOOS: linux, GOVersion: go1.24.2, GoArch: amd64
2025-06-11T22:00:47Z INF Settings: map[loglevel:debug metrics:0.0.0.0:2000 no-autoupdate:true token:*****]
2025-06-11T22:00:47Z INF Generated Connector ID: aff7c4a0-85a3-4ac9-8475-1e0aa1af8d94
2025-06-11T22:00:47Z DBG Fetched protocol: quic
2025-06-11T22:00:47Z INF Initial protocol quic
...7. Přidejte trasu tunelu
Jakmile je tunel spuštěný a funkční, můžeme přes něj směrovat službu httpbin.
V Cloudflare dashboard, přejděte na Sítě > Tunnels a vyberte svůj tunel.
Na Trasy kartě vyberte Přidat trasu > Publikovaná aplikace.
Zadejte hostname aplikace (například
httpbin.<your-domain>.com).V části Služba, zadejte
http://httpbin-service.httpbin-serviceje název služby Kubernetes definované vhttpbinsvc.yaml.Vyberte Přidat trasu.
8. Otestujte připojení
Chcete-li provést test, otevřete novou kartu prohlížeče a přejděte na httpbin.<your-domain>.com. Měli byste vidět domovskou stránku httpbin.
Volitelně můžete vytvořit aplikaci Access řídit, kdo může přistupovat ke službě.