コンテンツにスキップ

Kubernetes

Kubernetes は、コンテナのオーケストレーションおよび管理ツールです。Kubernetesは宣言的であり、.ymlファイルで最終状態を定義します。Kubernetesクラスターには、マスターとワーカーの2つのコンポーネントがあります。マスターは、ユーザーがコンテナを管理するために対話する制御プレーンです。ワーカーノードは、コンテナがデプロイされ、実行される場所です。Kubernetesクラスターは、プライベートネットワークを介して内部的に接続されています。Cloudflare Tunnelを使用すると、Kubernetesクラスター内で実行されているサービスを公開することができます。

Kubernetesクラスターの作成

このガイドでは、Googleが管理するKubernetes GKEを使用します。 始めるには、以下の手順を実行してください。

  • gcloud CLIkubectl CLI をインストールします。
  • GCPコンソールで新しいKubernetesクラスターを作成します。
  • クラスターに接続するために、3つのドットを選択し、ドロップダウンから接続を選択します。
  • 表示されるコマンドをコピーし、ローカルターミナルに貼り付けます。

ポッドの作成

ポッドは、Kubernetesが作成する基本的なデプロイ可能オブジェクトです。ポッドは、クラスター内で実行されているプロセスのインスタンスを表します。以下の .ymlファイル (httpbin-app.yml) は、httpbinアプリケーションを含むポッドを作成します。ダウンタイムを防ぐために、2つのレプリカを作成します。アプリケーションは、クラスター内で web-service:80 でアクセス可能になります。

apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin-deployment
spec:
selector:
matchLabels:
app: httpbin
replicas: 2
template:
metadata:
labels:
app: httpbin
spec:
containers:
- name: httpbin
image: kennethreitz/httpbin:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: httpbin
ports:
- protocol: TCP
port: 80

以下のコマンドを使用して、アプリケーションがクラスター内で実行を開始します。

Terminal window
kubectl create -f httpbin-app.yml

ポッドのステータスは、コンソールまたは kubectl get pod コマンドを使用して確認できます。

Terminal window
kubectl get pods

Cloudflare Tunnelによるルーティング

トンネルは、ダッシュボードを通じて このガイド を使用して作成できます。コネクタをインストールするためのコマンドを実行する代わりに、環境としてdockerを選択し、全コマンドではなくトークンのみをコピーします。トンネルを http://web-service:80 から k8.example.com へルーティングするように設定します。以下の内容で cloudflared-deployment.yml ファイルを作成します。

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: cloudflared
name: cloudflared-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
pod: cloudflared
template:
metadata:
creationTimestamp: null
labels:
pod: cloudflared
spec:
containers:
- command:
- cloudflared
- tunnel
# k8s環境では、メトリクスサーバーは実行されているポッドの外部でリッスンする必要があります。
# アドレス 0.0.0.0:2000 は、名前空間内の任意のポッドを許可します。
- --metrics
- 0.0.0.0:2000
- run
args:
- --token
- <token value>
image: cloudflare/cloudflared:latest
name: cloudflared
livenessProbe:
httpGet:
# Cloudflaredには、エッジへのアクティブな接続がある場合にのみ200を返す/readyエンドポイントがあります。
path: /ready
port: 2000
failureThreshold: 1
initialDelaySeconds: 10
periodSeconds: 10

このファイルは、以下のコマンドでデプロイされます。

Terminal window
kubectl create -f cloudflared-deployment.yml

クラスター内のアプリケーションは、設定されたドメイン名を介してアクセス可能になります。