ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
Ciliumを使用したOracle Cloud Infrastructure Container Engine for Kubernetesでのネットワーキング・サービスの提供
イントロダクション
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)を使用して新しいKubernetesクラスタをデプロイする場合、インストールされるデフォルトのコンテナ・ネットワーク・インタフェース(CNI)プラグインはOCI VCNネイティブCNIプラグインです。クラウド・ネイティブ・コンピューティングでは、別のCNIプラグインを選択するだけで、コンテナ・プラットフォームにネットワーク(セキュリティ)サービスを提供する方法を選択できます。このチュートリアルでは、Flannel CNIプラグインでOKEを使用して新しいKubernetesクラスタをデプロイし、これをCilium CNIプラグインに変更します。Ciliumは、OCI VCNネイティブCNIプラグインおよびFlannelと比較して、他のネットワーク(セキュリティ)機能を提供します。
目的
- カスタム作成方法を使用して、新しいKubernetesクラスタをOracle Cloud Infrastructure Container Engine for Kubernetesプラットフォームにデプロイします。このデプロイメント中に、Flannel CNIプラグインを選択してから、Cilium CNIプラグインをデプロイし、Flannel CNIプラグインを削除して、Ciliumがクラウド・ネイティブ・アプリケーションのネットワーク(セキュリティ)サービスの主要なCNIプラグインとなるようにし、Cilium CNIプラグインを使用してNetworkPolicyおよびLoadBalancerサービスをデプロイおよびテストします。
タスク1: OKEを使用したKubernetesクラスタのデプロイ
様々なOKEデプロイメント・モデルの詳細は、ネットワーク・リソース構成の例を参照してください。
OKEデプロイメント・モデルの例は、次のとおりです。
-
例1: Flannel CNIプラグイン、パブリックKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例2: Flannel CNIプラグイン、プライベートKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例3: OCI CNIプラグイン、パブリックKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
-
例4: OCI CNIプラグイン、プライベートKubernetes APIエンドポイント、プライベート・ワーカー・ノードおよびパブリック・ロード・バランサを含むクラスタ。
このチュートリアルでは、例1デプロイメント・モデルを選択します。例3のデプロイ方法は、新規Kubernetesクラスタの作成およびコンポーネントの検証ですでに説明されています。
-
ハンバーガー・メニューをクリックします。
- 「開発者サービス」をクリックします。
- 「Kubernetesクラスタ(OKE)」をクリックします。
-
「クラスタの作成」をクリックします。
- 「カスタム作成」を選択します。
- 「発行」をクリックします。
-
次の情報を入力します
- クラスタの名前を入力します。
- コンパートメントを選択します。
- Kubernetesバージョンを選択します。
- 「次」をクリックします。
-
「ネットワーク設定」に、次の情報を入力します。
- 「ネットワーク・タイプ」としてFlannelオーバーレイを選択します。
- 新しいKubernetesクラスタのデプロイに使用するVCNを選択します。VCNを作成するには、新しいVCNの作成を参照してください。
- KubernetesサービスにIPアドレスを提供するために選択したVCN内のサブネットを選択します。サブネットを作成するには、VCN内のプライベート・サブネットの作成を参照してください。
- Kubernetes APIエンドポイントにIPアドレスを提供するために選択したVCN内のサブネットを選択します。
- 「APIエンドポイントへのパブリックIPアドレスの割当て」を選択します。
- 「次」をクリックします。
-
「ノード・プール(ワーカー・ノード)」に、次の情報を入力します。異なる設定を選択できますが、同じ設定を維持しようとします。
- コンパートメントを選択します。
- Kubernetesバージョンを選択します。
- 可用性ドメインを選択します。
- Kubernetesワーカー・ノードにIPアドレスを提供するために選択したVCN内のサブネットを選択します。
- ワーカー・ノードの配置に使用するフォルト・ドメインを選択します。
- 「次」をクリックします。
- ネットワーク情報を確認します。
- 下へスクロール
- クラスタ情報を確認します。
- 下へスクロール
- ノードプールの情報を確認します。
- 下へスクロール
- 「Create a Basic Cluster」を選択しないでください。
- 「クラスタの作成」をクリックします。
- さまざまなコンポーネントのステータスを確認します。
- 「閉じる」をクリックします。
-
ステータスが「作成中」であることを確認します。
- ステータスが ACTIVEであることを確認します。
- 下へスクロール
- 「ノード・プール」をクリックします。
- プール内のワーカー・ノードが「作成中」のままであることを確認します。
- プール内のワーカー・ノードが「アクティブ」であることを確認します。
- ノード・プール名をクリックします。
-
下へスクロール
-
すべてのノードが「準備完了」および「アクティブ」であることを確認します。
このデプロイメントを視覚的に表現するには、次の図を参照してください。
-
「開発者サービス」および「Kubernetesクラスタ(OKE)」に移動します。新しくデプロイしたKubernetesクラスタをクリックします。
-
「クラスタへのアクセス」をクリックします。
- 「クラウド・シェルのアクセス」を選択します。
- 「コピー」をクリックして、Kubernetesクラスタへのアクセスを許可するコマンドをコピーします。
- 「クラウド・シェルの起動」をクリックします。
-
Cloud Shellが起動します。一部の情報はバックグラウンドで表示されます。
- Cloud Shellアクセス権があることを確認します。
- 最大化アイコンをクリックして、クラウド・シェル・ウィンドウを大きくします。
-
コピーされたコマンドを貼り付けます。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.eu-amsterdam-1.aaaaaaaaXXX --file $HOME/.kube/config --region eu-amsterdam-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT Existing Kubeconfig file found at /home/iwan_hooge/.kube/config and new config merged into it
-
次のコマンドを実行して、ワーカー・ノードに関する情報を取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get nodes NAME STATUS ROLES AGE VERSION 10.0.10.132 Ready node 11m v1.28.2 10.0.10.178 Ready node 12m v1.28.2 10.0.10.79 Ready node 12m v1.28.2
-
デプロイされたワーカー・ノードを確認します。
-
タスク2: デプロイされたOKE KubernetesクラスタへのCNIプラグインとしてのCiliumのインストール
-
現在デプロイされているCNIプラグイン(Flannel)を確認します。
-
次のコマンドを実行します
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/coredns-69c9994dbb-6b8tk 1/1 Running 0 12m pod/coredns-69c9994dbb-qxq5j 1/1 Running 0 12m pod/coredns-69c9994dbb-xdnfc 1/1 Running 0 16m pod/csi-oci-node-h57qv 1/1 Running 1 (12m ago) 14m pod/csi-oci-node-nfrnw 1/1 Running 0 14m pod/csi-oci-node-pjqwk 1/1 Running 0 15m pod/kube-dns-autoscaler-d8d55cddd-pbfql 1/1 Running 0 16m pod/kube-flannel-ds-9tc92 1/1 Running 1 (13m ago) 14m pod/kube-flannel-ds-b8dch 1/1 Running 1 (12m ago) 14m pod/kube-flannel-ds-lbvw9 1/1 Running 0 15m pod/kube-proxy-2stzh 1/1 Running 0 15m pod/kube-proxy-8t6j4 1/1 Running 0 14m pod/kube-proxy-jxx6c 1/1 Running 0 14m pod/proxymux-client-cmmxv 1/1 Running 0 15m pod/proxymux-client-kk9bh 1/1 Running 0 14m pod/proxymux-client-mn4k9 1/1 Running 0 14m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 16m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 16m daemonset.apps/kube-flannel-ds 3 3 3 3 3 <none> 16m daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 16m daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 16m daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 16m daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 16m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 16m deployment.apps/kube-dns-autoscaler 1/1 1 1 16m NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-69c9994dbb 3 3 3 16m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 16m iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Flannel CNIプラグインがポッドとしてデプロイされていることを確認します。
-
Flannel CNIプラグインがサービスとしてデプロイされていることを確認します。
これは、Flannel CNIプラグインがインストールされているKubernetesワーカー・ノードのビジュアル表現です。
-
-
Ciliumリポジトリを追加します。
-
次のコマンドを実行して、Ciliumリポジトリを追加します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm repo add cilium https://helm.cilium.io/ WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config "cilium" has been added to your repositories
-
次のコマンドを実行して、ciliumデプロイメント
YAML
ファイルを生成します。iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm show values cilium/cilium > cilium.yaml WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
-
次のコマンドを使用して、Cilium
YAML
ファイルが存在することを確認します。-
次のコマンドを実行します
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls cilium.yaml ssh-key-2024-02-14.key
-
YAML
ファイルが存在することを確認します。 -
次のコマンドを実行して、ナノ・エディタで
YAML
ファイルを編集します。iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ nano cilium.yaml
-
-
YAML
ファイルは、設定が多い大きなファイルであり、ファイルをスクロールして次の設定を検索し、更新します。containerRuntime: integration: crio hubble: tls: enabled: false hubble: relay: enabled: true hubble: ui: enabled: true ipam: mode: "kubernetes" clustermesh: useAPIServer: true
-
キーワード、設定またはセクションを検索するには、
CTRL + W
ショートカットを使用します。- コンテナ・ランタイム・セクションを見つけます。
- 統合タイプを変更します。
- 「HubbleのTLS構成」セクション。
- TLSを無効にします。
- relayセクション。
- リレーを有効にします。
- *uiセクション。
- UIを有効にします。
- ipamセクション内。
- モードをkubernetesに設定します。
- clustermeshセクション。
- useAPIServerを
true
に設定します。 CTRL + X
ショートカットを使用して、ナノ・エディタを終了します。
-
Y
(yes)と入力して、YAML
ファイルを保存します。 -
YAML
ファイル名はデフォルトのままにします。 -
ファイルが保存されると、端末に戻ります。
-
Ciliumをインストールします。
-
次のコマンドを実行して、Ciliumをインストールします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm install cilium cilium/cilium --namespace=kube-system -f cilium.yaml WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config NAME: cilium LAST DEPLOYED: Thu Mar 21 10:31:04 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: You have successfully installed Cilium with Hubble Relay and Hubble UI. Your release version is 1.15.2. For any further help, visit https://docs.cilium.io/en/v1.15/gettinghelp iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Ciliumが正常にインストールされたことを示すメッセージが表示されます。
-
-
Ciliumコマンドを実行するには、次のコマンドを使用してCiliumコマンドライン・インタフェース(CLI)をダウンロードします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt) iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ CLI_ARCH=amd64 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum} % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 37.5M 100 37.5M 0 0 28.7M 0 0:00:01 0:00:01 --:--:-- 53.3M % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 92 100 92 0 0 128 0 --:--:-- --:--:-- --:--:-- 0 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum cilium-linux-arm64.tar.gz: OK
-
次のコマンドを実行して、Cilium CLIアプリケーションを解凍します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ sudo tar xzvf cilium-linux-${CLI_ARCH}.tar.gz
-
Cilium CLIファイルが存在することを確認するには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls -l total 138060 -rw-r--r--. 1 iwan_hooge oci 101843096 Mar 18 17:19 cilium -rw-r--r--. 1 iwan_hooge oci 39388621 Mar 21 10:38 cilium-linux-arm64.tar.gz -rw-r--r--. 1 iwan_hooge oci 92 Mar 21 10:38 cilium-linux-arm64.tar.gz.sha256sum -rw-r--r--. 1 iwan_hooge oci 126806 Mar 21 10:29 cilium.yaml -rw-------. 1 iwan_hooge oci 1671 Feb 14 10:07 ssh-key-2024-02-14.key iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
圧縮に成功したら、リスト内の
cillium
という名前のファイルを確認します。
-
-
次のコマンドを実行して、ダウンロードした圧縮ファイルを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
-
Cilium CLIを使用します。
-
次のコマンドを実行して、Cilium CLIファイルを実行可能にします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ chmod 777 cilium
-
CiliumでKubernetesクラスタのステータスをチェックするには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: 1 errors \__/ ClusterMesh: OK Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment hubble-ui Desired: 1, Unavailable: 1/1 Deployment hubble-relay Desired: 1, Unavailable: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Containers: cilium Running: 3 cilium-operator Running: 2 hubble-ui Running: 1 clustermesh-apiserver Running: 1 hubble-relay Running: 1 Cluster Pods: 3/7 managed by Cilium Helm chart version: 1.15.2 Image versions cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 Errors: hubble-ui hubble-ui 1 pods of Deployment hubble-ui are not ready hubble-relay hubble-relay 1 pods of Deployment hubble-relay are not ready iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
ノート: Ciliumの実行前にポッドが開始されたため、一部のポッドはまだCiliumによって管理されていないため、エラーが発生します。
-
このエラーは ClusterMeshに関連しています。
-
このエラーは、Hubble UIおよびHubble Relayに関連しています。
-
すべてのクラスタ・ポッドがCiliumによって管理されているわけではないことに注意してください。Ciliumが管理しているのは3/7ポッドのみです。全てがCiliumで管理されていることを確認する必要があります。
-
前述のエラーに関連する追加のエラー・メッセージに注意してください。
-
-
現在Ciliumによって管理されていないポッドを確認して割り当てます。Ciliumには、その識別に役立つスクリプトが用意されています。
-
次のコマンドを実行して、スクリプトをダウンロードします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ curl -sLO https://raw.githubusercontent.com/cilium/cilium/master/contrib/k8s/k8s-unmanaged.sh
-
次のコマンドを実行して、このスクリプトを実行可能にします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ chmod +x k8s-unmanaged.sh
-
次のコマンドを実行して、このスクリプトを実行し、さらに注意が必要なポッドを検出します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./k8s-unmanaged.sh Skipping pods with host networking enabled or with status not in Running or Pending phase... kube-system/clustermesh-apiserver-664b6c9c84-p49tr kube-system/hubble-relay-58d6b4cc94-kdwl4 kube-system/hubble-ui-6548d56557-w9s6t kube-system/kube-dns-autoscaler-d8d55cddd-pbfql iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
注意が必要なポッドに注意してください。
-
次のコマンドを実行して、注意が必要なポッドを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl -n kube-system delete pod clustermesh-apiserver-664b6c9c84-p49tr hubble-relay-58d6b4cc94-kdwl4 hubble-ui-6548d56557-w9s6t kube-dns-autoscaler-d8d55cddd-pbfql pod "clustermesh-apiserver-664b6c9c84-p49tr" deleted pod "hubble-relay-58d6b4cc94-kdwl4" deleted pod "hubble-ui-6548d56557-w9s6t" deleted pod "kube-dns-autoscaler-d8d55cddd-pbfql" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
削除されたポッドの確認。
-
-
次のコマンドを実行して、このスクリプトを実行し、さらに注意が必要なポッドを再度検出します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./k8s-unmanaged.sh Skipping pods with host networking enabled or with status not in Running or Pending phase... iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
注意が必要なポッドがなくなったことに注意してください。つまり、Ciliumネットワークを有効にしてポッドが再作成されます。
-
CiliumでKubernetesクラスタのステータスを確認します。
-
CiliumでKubernetesクラスタのステータスをチェックするには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: OK \__/ ClusterMesh: OK Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1 Containers: cilium Running: 3 hubble-ui Running: 1 hubble-relay Running: 1 cilium-operator Running: 2 clustermesh-apiserver Running: 1 Cluster Pods: 7/7 managed by Cilium Helm chart version: 1.15.2 Image versions hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
すべてのクラスタ・ポッドがCiliumによって管理されていることに注意してください。
-
-
現在デプロイされているCNIプラグインを確認します。
-
次のコマンドを実行して、現在デプロイされているCNIプラグイン(FlannelおよびCilium)を確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/cilium-operator-5995454695-8c6m4 1/1 Running 0 33m pod/cilium-operator-5995454695-s28sl 1/1 Running 0 33m pod/cilium-v8phg 1/1 Running 0 33m pod/cilium-vnfng 1/1 Running 0 33m pod/cilium-w8qq9 1/1 Running 0 33m pod/clustermesh-apiserver-664b6c9c84-4gvrp 1/2 Error 1 (77s ago) 2m29s pod/coredns-69c9994dbb-c2v77 1/1 Running 0 33m pod/coredns-69c9994dbb-kjdxp 1/1 Running 0 33m pod/coredns-69c9994dbb-sqv8t 1/1 Running 0 32m pod/csi-oci-node-h57qv 1/1 Running 1 (22h ago) 22h pod/csi-oci-node-nfrnw 1/1 Running 0 22h pod/csi-oci-node-pjqwk 1/1 Running 0 22h pod/hubble-relay-58d6b4cc94-lrjls 1/1 Running 0 2m29s pod/hubble-ui-6548d56557-hnt2d 2/2 Running 0 2m29s pod/kube-dns-autoscaler-d8d55cddd-n5zv5 1/1 Running 0 2m29s pod/kube-flannel-ds-9tc92 1/1 Running 1 (22h ago) 22h pod/kube-flannel-ds-b8dch 1/1 Running 1 (22h ago) 22h pod/kube-flannel-ds-lbvw9 1/1 Running 0 22h pod/kube-proxy-2stzh 1/1 Running 0 22h pod/kube-proxy-8t6j4 1/1 Running 0 22h pod/kube-proxy-jxx6c 1/1 Running 0 22h pod/proxymux-client-cmmxv 1/1 Running 0 22h pod/proxymux-client-kk9bh 1/1 Running 0 22h pod/proxymux-client-mn4k9 1/1 Running 0 22h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/clustermesh-apiserver NodePort 10.96.181.249 <none> 2379:32379/TCP 33m service/clustermesh-apiserver-metrics ClusterIP None <none> 9962/TCP,9963/TCP 33m service/hubble-peer ClusterIP 10.96.249.93 <none> 80/TCP 33m service/hubble-relay ClusterIP 10.96.172.180 <none> 80/TCP 33m service/hubble-ui ClusterIP 10.96.119.250 <none> 80/TCP 33m service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 22h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/cilium 3 3 3 3 3 kubernetes.io/os=linux 33m daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 22h daemonset.apps/kube-flannel-ds 3 3 3 3 3 <none> 22h daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22h daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 22h daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 22h daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 22h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cilium-operator 2/2 2 2 33m deployment.apps/clustermesh-apiserver 0/1 1 0 33m deployment.apps/coredns 3/3 3 3 22h deployment.apps/hubble-relay 1/1 1 1 33m deployment.apps/hubble-ui 1/1 1 1 33m deployment.apps/kube-dns-autoscaler 1/1 1 1 22h NAME DESIRED CURRENT READY AGE replicaset.apps/cilium-operator-5995454695 2 2 2 33m replicaset.apps/clustermesh-apiserver-664b6c9c84 1 1 0 33m replicaset.apps/coredns-69c9994dbb 3 3 3 22h replicaset.apps/hubble-relay-58d6b4cc94 1 1 1 33m replicaset.apps/hubble-ui-6548d56557 1 1 1 33m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Cilium CNIプラグインが存在することに注意してください。
-
Flannel CNIプラグインも存在することに注意してください。
これは、FlannelおよびCilium CNIプラグインがインストールされたKubernetesワーカー・ノードのビジュアル表現です。
-
-
Flannel CNIプラグインを削除します。
-
次のコマンドを実行して、Flannel CNIプラグインを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete -n kube-system daemonset kube-flannel-ds daemonset.apps "kube-flannel-ds" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Flannel CNIプラグインが正常に削除されたというメッセージが表示されます。
-
-
現在デプロイされているCNIプラグインを確認します。
-
次のコマンドを実行して、現在デプロイされているCNIプラグイン(Cilium)を確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/cilium-operator-5995454695-8c6m4 1/1 Running 0 35m pod/cilium-operator-5995454695-s28sl 1/1 Running 0 35m pod/cilium-v8phg 1/1 Running 0 35m pod/cilium-vnfng 1/1 Running 0 35m pod/cilium-w8qq9 1/1 Running 0 35m pod/clustermesh-apiserver-664b6c9c84-4gvrp 2/2 Running 3 (50s ago) 4m28s pod/coredns-69c9994dbb-c2v77 1/1 Running 0 35m pod/coredns-69c9994dbb-kjdxp 1/1 Running 0 35m pod/coredns-69c9994dbb-sqv8t 1/1 Running 0 34m pod/csi-oci-node-h57qv 1/1 Running 1 (22h ago) 22h pod/csi-oci-node-nfrnw 1/1 Running 0 22h pod/csi-oci-node-pjqwk 1/1 Running 0 22h pod/hubble-relay-58d6b4cc94-lrjls 1/1 Running 0 4m28s pod/hubble-ui-6548d56557-hnt2d 2/2 Running 0 4m28s pod/kube-dns-autoscaler-d8d55cddd-n5zv5 1/1 Running 0 4m28s pod/kube-proxy-2stzh 1/1 Running 0 22h pod/kube-proxy-8t6j4 1/1 Running 0 22h pod/kube-proxy-jxx6c 1/1 Running 0 22h pod/proxymux-client-cmmxv 1/1 Running 0 22h pod/proxymux-client-kk9bh 1/1 Running 0 22h pod/proxymux-client-mn4k9 1/1 Running 0 22h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/clustermesh-apiserver NodePort 10.96.181.249 <none> 2379:32379/TCP 35m service/clustermesh-apiserver-metrics ClusterIP None <none> 9962/TCP,9963/TCP 35m service/hubble-peer ClusterIP 10.96.249.93 <none> 80/TCP 35m service/hubble-relay ClusterIP 10.96.172.180 <none> 80/TCP 35m service/hubble-ui ClusterIP 10.96.119.250 <none> 80/TCP 35m service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 22h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/cilium 3 3 3 3 3 kubernetes.io/os=linux 35m daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 22h daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22h daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 22h daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 22h daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 22h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cilium-operator 2/2 2 2 35m deployment.apps/clustermesh-apiserver 1/1 1 1 35m deployment.apps/coredns 3/3 3 3 22h deployment.apps/hubble-relay 1/1 1 1 35m deployment.apps/hubble-ui 1/1 1 1 35m deployment.apps/kube-dns-autoscaler 1/1 1 1 22h NAME DESIRED CURRENT READY AGE replicaset.apps/cilium-operator-5995454695 2 2 2 35m replicaset.apps/clustermesh-apiserver-664b6c9c84 1 1 1 35m replicaset.apps/coredns-69c9994dbb 3 3 3 22h replicaset.apps/hubble-relay-58d6b4cc94 1 1 1 35m replicaset.apps/hubble-ui-6548d56557 1 1 1 35m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Cilium CNIプラグインが存在し、Flannel CNIプラグインが削除されていることに注意してください。
これは、Cilium CNIプラグインがインストールされているKubernetesワーカー・ノードのビジュアル表現です。
-
-
Ciliumがインストールされている場所を確認するために使用できる追加コマンド。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl -n kube-system get pods -l k8s-app=cilium NAME READY STATUS RESTARTS AGE cilium-v8phg 1/1 Running 0 22h cilium-vnfng 1/1 Running 0 22h cilium-w8qq9 1/1 Running 0 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
CiliumでKubernetesクラスタのステータスを確認します。
-
CiliumでKubernetesクラスタのステータスをチェックするには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: OK \__/ ClusterMesh: OK Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1 Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Containers: cilium Running: 3 cilium-operator Running: 2 hubble-ui Running: 1 clustermesh-apiserver Running: 1 hubble-relay Running: 1 Cluster Pods: 7/7 managed by Cilium Helm chart version: 1.15.2 Image versions cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
すべてのクラスタ・ポッドがCiliumによって管理されていることに注意してください。
-
-
Ciliumには、Kubernetesクラスタ内のネットワーキングをテストできる組込みの接続テストがあります。次のコマンドを実行して、Cilium接続テストを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium connectivity test ℹ️ Monitor aggregation detected, will skip some flow validation steps ✨ [cluster-c6e7ypjgkyq] Creating namespace cilium-test for connectivity check... ✨ [cluster-c6e7ypjgkyq] Deploying echo-same-node service... ✨ [cluster-c6e7ypjgkyq] Deploying DNS test server configmap... ✨ [cluster-c6e7ypjgkyq] Deploying same-node deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client2 deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client3 deployment... ✨ [cluster-c6e7ypjgkyq] Deploying echo-other-node service... ✨ [cluster-c6e7ypjgkyq] Deploying other-node deployment... ✨ [host-netns] Deploying cluster-c6e7ypjgkyq daemonset... ✨ [host-netns-non-cilium] Deploying cluster-c6e7ypjgkyq daemonset... ℹ️ Skipping tests that require a node Without Cilium ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client2 to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/echo-same-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client3 to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/echo-other-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to be synchronized by Cilium pod kube-system/cilium-v8phg ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to be synchronized by Cilium pod kube-system/cilium-vnfng ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to be synchronized by Cilium pod kube-system/cilium-v8phg ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to be synchronized by Cilium pod kube-system/cilium-vnfng ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.132:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.132:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.178:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.178:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.79:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.79:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for DaemonSet cilium-test/host-netns-non-cilium to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for DaemonSet cilium-test/host-netns to become ready... ℹ️ Skipping IPCache check 🔭 Enabling Hubble telescope... ⚠️ Unable to contact Hubble Relay, disabling Hubble telescope and flow validation: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:4245: connect: connection refused" ℹ️ Expose Relay locally with: cilium hubble enable cilium hubble port-forward& ℹ️ Cilium version: 1.15.2 🏃 Running 75 tests ... [=] Test [no-unexpected-packet-drops] [1/75] ... [=] Test [no-policies] [2/75] ......................................................... [=] Skipping Test [no-policies-from-outside] [3/75] (skipped by condition) [=] Test [no-policies-extra] [4/75] ................................................ [=] Test [allow-all-except-world] [5/75] .................................... [=] Test [client-ingress] [6/75] ...... [=] Test [client-ingress-knp] [7/75] ...... [=] Test [allow-all-with-metrics-check] [8/75] ...... [=] Test [all-ingress-deny] [9/75] ............ [=] Skipping Test [all-ingress-deny-from-outside] [10/75] (skipped by condition) [=] Test [all-ingress-deny-knp] [11/75] ............ [=] Test [all-egress-deny] [12/75] ........................ [=] Test [all-egress-deny-knp] [13/75] ........................ [=] Test [all-entities-deny] [14/75] ............ [=] Test [cluster-entity] [15/75] ... [=] Skipping Test [cluster-entity-multi-cluster] [16/75] (skipped by condition) [=] Test [host-entity-egress] [17/75] .................. [=] Test [host-entity-ingress] [18/75] ...... [=] Test [echo-ingress] [19/75] ...... [=] Skipping Test [echo-ingress-from-outside] [20/75] (skipped by condition) [=] Test [echo-ingress-knp] [21/75] ...... [=] Test [client-ingress-icmp] [22/75] ...... [=] Test [client-egress] [23/75] ...... [=] Test [client-egress-knp] [24/75] ...... [=] Test [client-egress-expression] [25/75] ...... [=] Test [client-egress-expression-knp] [26/75] ...... [=] Test [client-with-service-account-egress-to-echo] [27/75] ...... [=] Test [client-egress-to-echo-service-account] [28/75] ...... [=] Test [to-entities-world] [29/75] ......... [=] Test [to-cidr-external] [30/75] ...... [=] Test [to-cidr-external-knp] [31/75] ...... [=] Skipping Test [from-cidr-host-netns] [32/75] (skipped by condition) [=] Test [echo-ingress-from-other-client-deny] [33/75] .......... [=] Test [client-ingress-from-other-client-icmp-deny] [34/75] ............ [=] Test [client-egress-to-echo-deny] [35/75] ............ [=] Test [client-ingress-to-echo-named-port-deny] [36/75] .... [=] Test [client-egress-to-echo-expression-deny] [37/75] .... [=] Test [client-with-service-account-egress-to-echo-deny] [38/75] .... [=] Test [client-egress-to-echo-service-account-deny] [39/75] .. [=] Test [client-egress-to-cidr-deny] [40/75] ...... [=] Test [client-egress-to-cidr-deny-default] [41/75] ...... [=] Test [health] [42/75] ... [=] Skipping Test [north-south-loadbalancing] [43/75] (Feature node-without-cilium is disabled) [=] Test [pod-to-pod-encryption] [44/75] . [=] Test [node-to-node-encryption] [45/75] ... [=] Skipping Test [egress-gateway] [46/75] (skipped by condition) [=] Skipping Test [egress-gateway-excluded-cidrs] [47/75] (Feature enable-ipv4-egress-gateway is disabled) [=] Skipping Test [pod-to-node-cidrpolicy] [48/75] (Feature cidr-match-nodes is disabled) [=] Skipping Test [north-south-loadbalancing-with-l7-policy] [49/75] (Feature node-without-cilium is disabled) [=] Test [echo-ingress-l7] [50/75] .................. [=] Test [echo-ingress-l7-named-port] [51/75] .................. [=] Test [client-egress-l7-method] [52/75] .................. [=] Test [client-egress-l7] [53/75] ............... [=] Test [client-egress-l7-named-port] [54/75] ............... [=] Skipping Test [client-egress-l7-tls-deny-without-headers] [55/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [client-egress-l7-tls-headers] [56/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [client-egress-l7-set-header] [57/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [echo-ingress-auth-always-fail] [58/75] (Feature mutual-auth-spiffe is disabled) [=] Skipping Test [echo-ingress-mutual-auth-spiffe] [59/75] (Feature mutual-auth-spiffe is disabled) [=] Skipping Test [pod-to-ingress-service] [60/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-all] [61/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-ingress-identity] [62/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-backend-service] [63/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-allow-ingress-identity] [64/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service] [65/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-world-identity] [66/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-cidr] [67/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-all-ingress] [68/75] (Feature ingress-controller is disabled) [=] Test [dns-only] [69/75] ............... [=] Test [to-fqdns] [70/75] ............ [=] Skipping Test [pod-to-controlplane-host] [71/75] (skipped by condition) [=] Skipping Test [pod-to-k8s-on-controlplane] [72/75] (skipped by condition) [=] Skipping Test [pod-to-controlplane-host-cidr] [73/75] (skipped by condition) [=] Skipping Test [pod-to-k8s-on-controlplane-cidr] [74/75] (skipped by condition) [=] Test [check-log-errors] [75/75] ............................. ✅ All 47 tests (555 actions) successful, 28 tests skipped, 1 scenarios skipped. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
この場合、テストは75のテストを実行することになっています。
-
テストが終了すると、サマリーが表示されます。
タスク3: サンプルWebアプリケーションおよびサービスのデプロイ
-
サンプルのWebアプリケーションとサービスをデプロイします。
-
次のコマンドを実行して、サンプルのWebアプリケーションとサービスをデプロイします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run web --image=nginx --labels="app=web" --expose --port=80 service/web created pod/web created iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
アプリケーションとサービスが正常に作成されたことを確認します。
-
-
デプロイされたアプリケーションを確認します。
-
次のコマンドを実行して、デプロイされたアプリケーションを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE web 1/1 Running 0 56s
-
Webアプリケーションが実行されていることを確認します。
-
次のコマンドを実行して、デプロイされたサービスを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get deploy,svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 44h service/web ClusterIP 10.96.199.73 <none> 80/TCP 74s
-
Webサービスが実行されていることに注意します。
-
-
アプリケーションへの接続をテストするには、複数の方法があります。1つの方法は、ブラウザを開き、Webページにアクセスできるかどうかをテストすることです。ただし、使用可能なブラウザがない場合は、一時ポッドをデプロイして別のクイック・テストを実行できます。
-
次のコマンドを実行して、サンプル・ポッドをデプロイし、Webアプリケーションの接続をテストします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing enter. / #
-
次のコマンドを実行して、
wget
を使用してWebサーバーへの接続をテストします。/ # wget -qO- http://web <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
-
Webサーバーが戻すHTMLコードに注意し、Webサーバーと接続が機能していることを確認します。
-
次のコマンドを実行して、一時ポッドを終了します。
/ # exit Session ended, resume using 'kubectl attach test-8599 -c test-8599 -i -t' command when the pod is running pod "test-8599" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
CLIを終了するとすぐにポッドが削除されることに注意してください。
-
タスク4: NetworkPolicyタイプのKubernetesサービスの構成
Cilium CNIプラグインが提供するネットワーク・セキュリティ・サービスの1つは、NetworkPolicyタイプのサービスです。これは、2つのポッド間の接続を拒否することで、ポッド間の接続を制御する方法です。
-
次のコマンドを実行してナノ・エディタを開き、NetworkPolicyを実装してすべてのネットワーク・トラフィックを拒否する新しい
YAML
ファイルを作成します。iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ nano web-deny-all.yaml
-
YAML
ファイルで次の内容を使用します。kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: web-deny-all spec: podSelector: matchLabels: app: web ingress: []
-
CTRL + X
ショートカットを使用して、ナノ・エディタを終了します。
-
-
Y
(yes)と入力して、YAML
ファイルを保存します。 -
YAML
ファイル名はデフォルトのままにします。 -
YAML
ファイルを確認します。-
次のコマンドを実行して、新しい
YAML
ファイルを確認します。iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls -l total 138068 -rwxrwxrwx. 1 iwan_hooge oci 101843096 Mar 18 17:19 cilium -rw-r--r--. 1 iwan_hooge oci 39388621 Mar 21 10:38 cilium-linux-arm64.tar.gz -rw-r--r--. 1 iwan_hooge oci 92 Mar 21 10:38 cilium-linux-arm64.tar.gz.sha256sum -rw-r--r--. 1 iwan_hooge oci 126806 Mar 21 10:29 cilium.yaml -rwxr-xr-x. 1 iwan_hooge oci 574 Mar 21 10:58 k8s-unmanaged.sh -rw-------. 1 iwan_hooge oci 1671 Feb 14 10:07 ssh-key-2024-02-14.key -rw-r--r--. 1 iwan_hooge oci 151 Mar 22 09:11 web-deny-all.yaml
-
web-deny-all.yaml
ファイルが存在することに注意してください。
-
-
セキュリティーポリシーを実装します。
-
次のコマンドを実行して、セキュリティ・ポリシーを実装します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f web-deny-all.yaml networkpolicy.networking.k8s.io/web-deny-all created iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
セキュリティ・ポリシーが作成されていることを確認します。
-
-
サンプル・ポッドをデプロイして、NetworkPolicyのデプロイ後にWebアプリケーションの接続を再度テストします。
-
次のコマンドを実行して、サンプル・ポッドをデプロイし、Webアプリケーションの接続をテストします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing Enter.
-
次のコマンドを実行して、
wget
を使用してWebサーバーへの接続をテストします。/ # wget -qO- --timeout=2 http://web wget: download timed out
-
リクエストがタイムアウトしていることを確認します。
-
次のコマンドを実行して、一時ポッドを終了します。
/ # exit Session ended, resume using 'kubectl attach test-26867 -c test-26867 -i -t' command when the pod is running pod "test-26867" deleted
-
-
セキュリティ・ポリシーを削除し、テストを再度実行します。
-
次のコマンドを実行して、セキュリティ・ポリシーを削除します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete -f web-deny-all.yaml
-
セキュリティ・ポリシーが削除されていることを確認します。
-
次のコマンドを実行して、サンプル・ポッドをデプロイし、Webアプリケーションの接続をテストします。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing enter.
-
次のコマンドを実行して、
wget
を使用してWebサーバーへの接続をテストします。 -
Webサーバーが戻すHTMLコードに注意してください。これにより、Webサーバーと接続が機能していることが確認されます。
-
次のコマンドを実行して、一時ポッドを終了します。
/ # exit Session ended, resume using 'kubectl attach test-26248 -c test-26248 -i -t' command when the pod is running pod "test-26248" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
CLIを終了するとすぐにポッドが削除されることに注意してください。
-
タスク5: サンプルWebアプリケーションとサービスの削除
-
デプロイされたWebアプリケーションを削除するには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service web --namespace default service "web" deleted
-
デプロイされたWebサービスを削除するには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete pods -l app=web --namespace default pod "web" deleted
タスク6: サンプル・アプリケーションのデプロイおよびLoadBalancerタイプのKubernetesサービスの構成
Ciliumを使用してNetworkPolicyサービスをテストしました。Ciliumを使用してLoadBalancerサービスをテストすることもできます。
-
新しいサンプル・アプリケーションとサービスをデプロイします。
-
新しいサンプル・アプリケーションをデプロイするには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
アプリケーションが正常に作成されていることを確認します。
-
次のコマンドを実行して、デプロイされているポッドを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-6ncvx 1/1 Running 0 10s nginx-deployment-86dcfdf4c6-qbhn2 1/1 Running 0 10s
-
デプロイされたポッドを確認します。
-
次のコマンドを実行して、アプリケーションをLoadBalancerサービスに公開します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed
-
サービスが正常に作成され、アプリケーションが正常に公開されていることを確認します。
-
次のコマンドを実行して、公開されているサービスおよびIPアドレスを確認します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 <pending> 80:32422/TCP 12s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 <pending> 80:32422/TCP 23s
-
外部IPが保留されていることを確認します。
-
次のコマンドを実行して、パブリックIPアドレスが構成されていることを確認します(
.88
で終わります)。iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 XXX.XXX.XXX.88 80:32422/TCP 37s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
-
インターネット・ブラウザでパブリックIPアドレスをコピーして貼り付け、デプロイされたアプリケーション(デフォルトのWebサイトのNginx Webサーバー)がLoadBalancerサービスのパブリックIPアドレスを使用してアクセス可能かどうかを確認します。
タスク7: LoadBalancerタイプのサンプル・アプリケーションおよびKubernetesサービスの削除
-
次のコマンドを実行して、デプロイされているポッドを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-6ncvx 1/1 Running 0 2m54s nginx-deployment-86dcfdf4c6-qbhn2 1/1 Running 0 2m54s
-
デプロイされたポッドを確認します。
-
デプロイされたWebアプリケーションを削除するには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
アプリケーションが削除されていることを確認します。
-
次のコマンドを実行して、デプロイされているポッドを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace.
-
ポッドがデプロイされておらず、正常に削除されていることを確認します。
-
次のコマンドを実行して、デプロイされているサービスを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 XXX.XXX.XXX.88 80:32422/TCP 2m42s
-
デプロイされたサービスを確認します。
-
デプロイされたLoadBalancerサービスを削除するには、次のコマンドを実行します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
サービスが削除されていることを確認します。
-
次のコマンドを実行して、デプロイされているサービスを取得します。
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
LoadBalancerサービスはデプロイされておらず、正常に削除されていることに注意してください。
関連リンク
承認
- 著者 - Iwan Hoogendoorn (OCIネットワーク・スペシャリスト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Use Cilium to Provide Networking Services in Oracle Cloud Infrastructure Container Engine for Kubernetes
F96026-01
April 2024