ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
セキュアなアプリケーション開発のためのOracle Cloud Infrastructure Kubernetes EngineによるSSHトンネリングを活用
イントロダクション
Ali Mukadamの助けを借りてOKEでSSHトンネリングを受けた時、私はそれを「魔法」と呼んだ。
彼は私に次のメッセージで答えた。
「魔術(まじゅつ)は、あなたにも使(つか)うことができますよ」。わたしがどこにいるかは、一つであり、同じである」。
オリジナルタイトル: A Thor Movie
「あなたの祖先はそれを魔法と呼んでいましたが、あなたはそれを科学と呼んでいます。「I Come From a Land Where They Are One and the Same」です。
この魔法って何?
最新のアプリケーション開発では、特にOracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)を使用する場合、ローカル・リソースとクラウド・ベースのリソース間の接続を保護することが不可欠です。SSHトンネリングは、OKEクラスタに安全に接続するためのシンプルで強力な方法を提供し、開発者はパブリック・インターネットに公開することなくリソースを管理および操作できます。このチュートリアルでは、OKEでSSHトンネリングを設定する方法と、開発者がこのアプローチをワークフローに統合してセキュリティと効率を向上させる方法について説明します。初期構成からベスト・プラクティスまで、OKEベースのアプリケーションでSSHトンネリングを効果的に活用するために必要なすべてのものについて説明します。
次の図は、2つの異なるアプリケーションをトンネリングするSSHの完全なトラフィック・フローを示しています。
目的
- OKEでのSSHトンネリングを活用して、セキュアなアプリケーション開発を実現します。
タスク1: OKEへのKubernetesクラスタのデプロイ(要塞およびオペレータ・インスタンスを使用)
OKEにKubernetesクラスタがデプロイされていることを確認します。
-
KubernetesクラスタをOKEにデプロイするには、次のいずれかの方法を使用します:
-
Oracle Cloud Infrastructure Kubernetes Engineを使用してTerraformでKubernetesクラスタをデプロイ: Terraformを使用して単一のKubernetesクラスタをOKEにデプロイします。
-
Terraformを使用したOKEを使用した異なるOCIリージョンへの複数のKubernetesクラスタのデプロイおよびRPCを使用したフル・メッシュ・ネットワークの作成: Terraformを使用したOKE上の複数のリージョンへの複数のKubernetesクラスタのデプロイ。
-
タスク1: 新しいKubernetesクラスタの作成およびコンポーネントの検証: クイック作成モードを使用してOKEにKubernetesクラスタをデプロイします。
-
タスク1: OKEを使用したKubernetesクラスタのデプロイ: 「カスタム作成」モードを使用してOKEにKubernetesクラスタをデプロイします。
このチュートリアルでは、Oracle Cloud Infrastructure Kubernetes Engineを使用したTerraformでのKubernetesクラスタのデプロイをOKEのベースKubernetesクラスタとして使用して、SSHトンネルを使用して、OKEにデプロイされたコンテナベースのアプリケーションにlocalhostを使用してアクセスする方法を説明します。
OCI OKE環境をすばやく確認して、ステージを設定します。
-
-
仮想クラウド・ネットワーク(VCN)
OCIコンソールにログインし、「Networking」および「Virtual Cloud Networks」に移動します。
-
okeという名前のVCNを確認します。
-
oke VCNをクリックします。
-
-
サブネット
VCNの詳細ページに移動します。
- 「サブネット」をクリックします。
- デプロイされたサブネットを確認します。
-
ゲートウェイ
VCNの詳細ページに移動します。
- 「インターネット・ゲートウェイ」をクリックします。
- 作成されたインターネット・ゲートウェイを確認します。
- 「NATゲートウェイ」をクリックします。
- 作成されたNATゲートウェイを確認します。
- 「サービス・ゲートウェイ」をクリックします。
- 作成されたサービス・ゲートウェイを確認します。
- 「セキュリティ・リスト」をクリックします。
- 作成したセキュリティ・リストを確認します。
-
ノード・プール
「開発者サービス」および「コンテナおよびアーティファクト」に移動します。
- 「Kubernetesクラスタ(OKE」をクリックします。
- okeクラスタをクリックします。
- 「ノード・プール」をクリックします。
- ノード・プールを確認します。
-
インスタンス
ComputeおよびInstancesに移動します。
- 「インスタンス」をクリックします。
- Kubernetesワーカー・ノード・デプロイメントを確認します。
- 要塞ホスト・デプロイメントを確認します。
- Kubernetes Operatorデプロイメントを確認します。
-
次の図は、このチュートリアルの残りのコンテンツの開始点の概要を示しています。
-
次の図は、前の図の簡略化されたビューを示しています。この図は、このチュートリアルの残りの部分で使用します。
タスク2: KubernetesクラスタへのNGINX Webサーバーのデプロイ
オペレータはインターネットから直接アクセスできず、Bastionホストを経由する必要があります。
-
このチュートリアルでは、Ali Mukadamが提供するSSHスクリプトを使用して、単一のSSHコマンドを使用してオペレータに接続します。このスクリプトおよび接続方法は、タスク4: 要塞および演算子を使用した接続性のチェックを参照してください。このスクリプトは、このチュートリアルの後半で必要になるため、必ず使用してください。
-
KubernetesオペレータのSSHセッションを設定します。
-
kubectl get nodes
コマンドを使用して、アクティブなワーカー・ノードを確認します。 -
すべてのアクティブなワーカー・ノードをレビューします。
-
-
コンテナ内で実行されているサンプルNGINXアプリケーションを作成するには、演算子に次のコードを指定して
modified2_nginx_ext_lb.yaml
という名前のYAMLファイルを作成します。YAMLファイルには、3つのレプリカを持つNGINX Webサーバー・アプリケーションを作成するコードが含まれ、ロード・バランサ・タイプのサービスも作成されます。
modified2_nginx_ext_lb.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-nginx-svc labels: app: nginx annotations: oci.oraclecloud.com/load-balancer-type: "lb" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.me-abudhabi-1.aaaaaaaaguwakvc6jxxxxxxxxxxxxxxxxxxxu7rixvdf5urvpxldhya" service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "50" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100" spec: type: LoadBalancer ports: - port: 80 selector: app: nginx
-
このアプリケーションを内部的にアクセス可能にし、プライベート・ロード・バランサ・サブネットにアタッチされているロード・バランサ・タイプのサービスを作成することを決定します。
ロード・バランサ・タイプのサービスをプライベート・ロード・バランサ・サブネットに割り当てるには、プライベート・ロード・バランサ・サブネットのサブネットOCIDが必要であり、「注釈」セクションで次のコードを追加する必要があります。
annotations: oci.oraclecloud.com/load-balancer-type: "lb" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.me-abudhabi-1.aaaaaaaaguwakvcxxxxxxxxxxxxxxxxxxxxxxxxxxxxixvdf5urvpxldhya" service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "50" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
-
プライベート・ロード・バランサ・サブネットのサブネットOCIDを取得するには、内部ロード・バランサ・サブネットをクリックします。
完全なプライベート・ロード・バランサ・サブネットOCIDの「表示」および「コピー」をクリックします。このOCIDは、「注釈」セクションで使用します。
-
NGINXアプリケーションおよびロード・バランサ・タイプのサービスをデプロイするには、次のコマンドを実行します:
-
YAMLファイルを演算子に作成します。
nano modified2_nginx_ext_lb.yaml
-
NGINXアプリケーションをロード・バランサ・タイプのサービスとともにデプロイします。
kubectl apply -f modified2_nginx_ext_lb.yaml
NGINXアプリケーションが正常にデプロイされたかどうかを検証します(イメージには示されていません)。
kubectl get pods
-
タイプ・ロード・バランサのサービスが正常にデプロイされたかどうかを検証します。
kubectl get svc
-
ロード・バランサ・タイプのサービスが正常にデプロイされたことを確認します。
-
-
内部ロード・バランサ・サブネットを見ると、このサブネットのCIDRブロックが
10.0.2.0/27
であることがわかります。ロード・バランサの新しいサービスのIPアドレスは10.0.2.3
です。 -
OCIコンソールでロード・バランサ・オブジェクトを確認するには、「ネットワーキング」、「ロード・バランサ」に移動し、「ロード・バランサ」をクリックします。
-
次の図は、これまでに実施したデプロイメントを示しています。ロード・バランサが追加されていることを確認します。
新しいポッド/アプリケーションのテスト
-
アプローチ1: 一時ポッドから
新しくデプロイされたNGINXアプリケーションがロード・バランサ・タイプのサービスと連携しているかどうかをテストするために、一時ポッドを使用して内部接続テストを実行できます。
アプリケーションへの接続をテストするには複数の方法があります。1つの方法として、ブラウザを開き、Webページにアクセスできるかどうかをテストします。ただし、使用可能なブラウザがない場合は、一時ポッドをデプロイすることで別のクイック・テストを実行できます。
一時ポッドを作成して接続テストに使用するには、タスク3: サンプルWebアプリケーションおよびサービスのデプロイを参照してください。
-
次のコマンドを実行します:
-
内部ロード・バランサ・サービスのIPアドレスを取得します。
kubectl get svc
-
サンプル・ポッドをデプロイしてWebアプリケーション接続をテストします。
kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh
-
wgetを使用してWebサーバーへの接続をテストします。
wget -qO- http://<ip-of-internal-lb-service>
-
Webサーバーが返すHTMLコードに注目し、Webサーバーと内部ロード・バランシング・サービスを使用した接続が機能していることを確認します。
-
-
次のコマンドを実行して、一時ポッドを終了します。
exit
コマンドライン・インタフェースを閉じるとすぐにポッドが削除されることに注意してください。
-
次の図は、これまでに実施したデプロイメントを示しています。一時的にデプロイされたポッドがロード・バランサIPタイプのサービスに接続して接続をテストしていることに注意してください。
-
-
アプローチ2: ローカル・コンピュータから
-
次のコマンドを実行して、ローカル・ラップトップからロード・バランサ・タイプのサービスを使用して、テストNGINXアプリケーションへの接続をテストします。
iwhooge@iwhooge-mac ~ % wget -qO- <ip-of-internal-lb-service>
ロード・バランサ・タイプのサービスには内部IPアドレスがあり、Kubernetes環境内でのみアクセスできるため、これは現在機能していません。
-
次のコマンドを実行して、カスタム・ポート
8080
でローカルIPアドレスを使用してNGINXアプリケーションへのアクセスを試みます。iwhooge@iwhooge-mac ~ % wget -qO- 127.0.0.1:8080 iwhooge@iwhooge-mac ~ %
現時点では、これは機能していませんが、SSHトンネルを設定した後、このチュートリアルの後半で同じコマンドを使用します。
-
-
次の図は、これまでに実施したデプロイメントを示しています。ローカルIPアドレスへのトンネリングされた接続は機能していないことに注意してください。
タスク3: Localhostエントリを含むSSH構成スクリプトの作成
SSHトンネルを機能させるには、/Users/iwhooge/.ssh
フォルダにあるSSH構成ファイルで次のエントリを追加する必要があります。
-
nano /Users/iwhooge/.ssh/config
コマンドを実行して、構成ファイルを編集します。 -
Host operator47セクションに次の行を追加します。
LocalForward 8080 127.0.0.1:8080
-
SSH構成ファイルの出力。
iwhooge@iwhooge-mac .ssh % pwd /Users/iwhooge/.ssh iwhooge@iwhooge-mac .ssh % more config Host bastion47 HostName 129.xxx.xxx.xxx user opc IdentityFile ~/.ssh/id_rsa UserKnownHostsFile /dev/null StrictHostKeyChecking=no TCPKeepAlive=yes ServerAliveInterval=50 Host operator47 HostName 10.0.0.11 user opc IdentityFile ~/.ssh/id_rsa ProxyJump bastion47 UserKnownHostsFile /dev/null StrictHostKeyChecking=no TCPKeepAlive=yes ServerAliveInterval=50 LocalForward 8080 127.0.0.1:8080 iwhooge@iwhooge-mac .ssh %
-
LocalForward
コマンドがSSH構成ファイルに追加されていることを確認します。
タスク4: SSHトンネルの設定およびLocalhostを使用したNGINX Webサーバーへの接続
-
オペレータにSSHで接続している場合は、そのセッションを切断します。
-
スクリプトを使用してオペレータに再接続します。
iwhooge@iwhooge-mac ~ % ssh operator47
-
次のコマンドを実行して、内部ロード・バランサ・サービスのIPアドレスを取得します。
[opc@o-sqrtga ~]$ kubectl get svc
-
オペレータ(SSHウィンドウ)で次のコマンドを実行して、SSHトンネルを設定し、localhost
8080
に送信されるすべてのトラフィックをタイプ・ロード・バランサ80
のサービスに転送します。ロード・バランサ・タイプのサービスは、最終的にトラフィックをNGINXアプリケーションに転送します。[opc@o-sqrtga ~]$ k port-forward svc/my-nginx-svc 8080:80
SSHウィンドウで、localhostポート
8080
がポート80
に転送されるという「転送中」のメッセージが表示されます。Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
-
-
ローカル・コンピュータからの接続をテストし、ポート
8080
でローカルIPアドレス(127.0.0.1
)を使用して接続が機能するかどうかを確認し、それによってOKE環境内のNGINXアプリケーションに接続できるかどうかを確認します。 -
新しい端末を開き、次のコマンドを実行して接続をテストします。
iwhooge@iwhooge-mac ~ % wget -qO- 127.0.0.1:8080
-
ローカル・コンピュータの端末に次の出力が表示されることに注意してください。これは、ローカル・コンピュータが動作していることを意味します。
iwhooge@iwhooge-mac ~ % wget -qO- 127.0.0.1:8080 <!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> iwhooge@iwhooge-mac ~ %
-
オペレータのSSHウィンドウで、出力が変更され、新しい行にHandling connection for 8080が追加されていることを確認します。
-
Webブラウザを使用したクイック・テストでは、次の出力が表示されます。
-
次の図は、これまでに実施したデプロイメントを示しています。ローカルIPアドレスへのトンネル接続は機能していることに注意してください。
タスク5: KubernetesクラスタへのMySQL Databaseサービスのデプロイ
SSHトンネルを介してNGINXアプリケーションにアクセスし、OKE環境内で実行されているMySQLデータベース・サービスを追加できるようになりました。
-
Kubernetes環境内にMySQLデータベース・サービスを設定するには、次のものを作成する必要があります:
- パスワード保護の秘密。
- データベース・ストレージの永続ボリュームと永続ボリューム要求。
- ロード・バランサ・タイプのサービスを持つMYSQLデータベース・サービス。
-
次のコマンドを実行して:
-
MySQLデータベース・サービスのパスワードを作成します。
nano mysql-secret.yaml
mysql-secret.yaml
に次のYAMLコードをコピーします。apiVersion: v1 kind: Secret metadata: name: mysql-secret type: kubernetes.io/basic-auth stringData: password: Or@cle1
-
YAMLコードを適用します。
kubectl apply -f mysql-secret.yaml
-
MySQLデータベース・サービスのストレージを作成します。
nano mysql-storage.yaml
mysql-storage.yaml
に次のYAMLコードをコピーします。apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
-
YAMLコードを適用します。
kubectl apply -f mysql-storage.yaml
-
MySQLデータベース・サービスおよびタイプ・ロード・バランサのサービスを作成します。
nano mysql-deployment.yaml
mysql-deployment.yaml
に次のYAMLコードをコピーします。apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - image: mysql:latest name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim --- apiVersion: v1 kind: Service metadata: name: my-mysql-svc labels: app: mysql annotations: oci.oraclecloud.com/load-balancer-type: "lb" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1.me-abudhabi-1.aaaaaaaaguwakvc6xxxxxxxxxxxxxxxxxxxxxx2rseu7rixvdf5urvpxldhya" service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "50" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100" spec: type: LoadBalancer ports: - port: 3306 selector: app: mysql
-
YAMLコードを適用します。
kubectl apply -f mysql-deployment.yaml
-
MySQLデータベース・サービスが正常にデプロイされたことを確認します。
kubectl get pod
-
MySQLデータベース・サービスが正常にデプロイされたことに注意してください。
-
ロード・バランサ・タイプのサービスが正常にデプロイされたかどうかを確認します。
kubectl get svc
-
ロード・バランサ・タイプのサービスは正常にデプロイされました。
-
-
OCIコンソールでロード・バランサ・オブジェクトを確認するには、「ネットワーキング」、「ロード・バランサ」に移動して、ロード・バランサをクリックします。
-
MySQLデータベース・サービスのターミナル・コンソールにアクセスするには、
kubectl exec
コマンドおよびlocalhost SSHトンネル・コマンドを使用します。-
次のコマンドを実行して、オペレータから端末コンソールにアクセスします。
kubectl exec --stdin --tty mysql-74f8bf98c5-bl8vv -- /bin/bash
-
次のコマンドを実行して、MySQLデータベース・サービス・コンソールにアクセスします。
mysql -p
-
mysql-secret.yaml
ファイルに指定したパスワードを入力し、MySQLデータベース・サービスのようこそメッセージを確認します。 -
次のSQL問合せを実行して、データベース・サービス内のすべてのMySQLデータベースのリストを表示します。
SHOW DATABASES;
Kubernetes環境内からMySQLデータベース・サービス管理コンソールにアクセスします。
-
-
次の図は、これまでに実施したデプロイメントを示しています。ロード・バランサ・タイプのサービスを持つMySQLサービスがデプロイされていることを確認します。
タスク6: SSH構成スクリプト内の追加のLocalhostエントリの追加
SSH構成スクリプト内にさらにlocalhostエントリを追加して、新しいMySQLデータベース・サービスにアクセスします。
-
SSHトンネルがMySQLデータベース・サービスで機能できるようにするには、
/Users/iwhooge/.ssh
フォルダにあるSSH構成ファイルで次のエントリを追加する必要があります。 -
nano /Users/iwhooge/.ssh/config
コマンドを実行して、構成ファイルを編集します。 -
Host operator47セクションに次の行を追加します。
LocalForward 8306 127.0.0.1:8306
-
SSH構成ファイルの出力。
Host bastion47 HostName 129.xxx.xxx.xxx user opc IdentityFile ~/.ssh/id_rsa UserKnownHostsFile /dev/null StrictHostKeyChecking=no TCPKeepAlive=yes ServerAliveInterval=50 Host operator47 HostName 10.0.0.11 user opc IdentityFile ~/.ssh/id_rsa ProxyJump bastion47 UserKnownHostsFile /dev/null StrictHostKeyChecking=no TCPKeepAlive=yes ServerAliveInterval=50 LocalForward 8080 127.0.0.1:8080 LocalForward 8306 127.0.0.1:8306
-
LocalForward
コマンドがSSH構成ファイルに追加されていることに注意してください。
タスク7: SSHトンネルの設定およびLocalhostを使用したMySQL Databaseへの接続
-
ローカル・コンピュータからMySQLデータベース・サービスへの接続をテストするには、ローカル・コンピュータにMySQL Workbenchをダウンロードしてインストールする必要があります。
-
スクリプトを使用して、オペレータへの新しい端末を再度開きます。もう一方の端末は開いたままにします。
iwhooge@iwhooge-mac ~ % ssh operator47
-
オペレータのSSHウィンドウで次のコマンドを実行して、SSHトンネルを設定し、localhost
8306
に送信されるすべてのトラフィックをタイプ・ロード・バランサ3306
のサービスに転送します。ロード・バランサ・タイプのサービスは、最終的にトラフィックをMySQLデータベース・サービスに転送します。[opc@o-sqrtga ~]$ k port-forward svc/my-mysql-svc 8306:3306
-
SSHウィンドウで、localhostポート
8306
がポート3306
に転送されるという「転送中」のメッセージが表示されます。Forwarding from 127.0.0.1:8306 -> 3306 Forwarding from [::1]:8306 -> 3306
-
-
MySQL Workbenchアプリケーションがインストールされ、SSHセッションおよびトンネルが確立されて、ローカル・コンピュータでMySQL Workbenchアプリケーションを開きます。
-
「+」をクリックして、新しいMySQL接続を追加します。
-
「新規接続の設定」に、次の情報を入力します。
- 接続名:名前を入力します。
- ホスト名:
127.0.0.1
(トラフィックをトンネリングしているローカル・ホスト)のIPアドレスを入力します。 - ポート:
8306
のポートを入力します。これは、MySQLデータベース・サービスのローカル・トンネル転送に使用するポートです。 - 「接続のテスト」をクリックします。
- パスワード:
mysql-secret.yaml
ファイルに指定したパスワードを入力します。 - 「OK」をクリックします。
-
「続行」をクリックして、接続の警告を無視します。この警告は、MySQL Workbenchアプリケーションのバージョンとして表示され、デプロイされたMySQLデータベース・サービスのバージョンに互換性がない可能性があります。
- 正常な接続を示すメッセージが表示されます。
- 「OK」をクリックします。
- 「OK」をクリックしてMySQL接続を保存します。
-
保存されたMySQL接続をクリックして、セッションを開きます。
-
「Please stand by...」というメッセージが表示されます。
-
「続行」をクリックして、接続の警告を無視します。
-
次のSQL問合せを実行して、データベース・サービス内のすべてのMySQLデータベースのリストを設定します。
SHOW DATABASES;
-
稲妻アイコンをクリックします。
-
MySQLデータベース・サービス内のすべてのMySQLデータベースの出力に注意してください。
-
-
オペレータのSSHウィンドウで、出力が変更され、新しい行にHandling connection for 8306が追加されたことを確認します。
-
複数の接続が作成されているため、複数のエントリがあります。それぞれに次のものがあります。
- テスト
- 実際の接続。
- SQL問合せ
- 以前に行ったテスト(追加)。
-
オペレータに対して複数のSSHセッションを開き、異なるアプリケーションに対して複数のトンネル・コマンドを同時に実行できるようになりました。次のウィンドウに注目します。
- MySQLデータベース・サービス用のtunnelコマンドを使用したSSH端末。
- ローカル・コンピュータからローカル・ホストIPアドレス
127.0.0.1
を使用したMySQLデータベース・サービスへのMYSQL Workbenchアプリケーションを使用した接続。 - NGINXアプリケーション用のtunnelコマンドを使用したSSH端末。
- ローカル・コンピュータからNGINXアプリケーションへのローカル・ホストIPアドレス
127.0.0.1
を使用したSafariインターネット・ブラウザを使用した接続。
-
次の図は、これまでに実施したデプロイメントを示しています。ローカルIPアドレスへのトンネル接続は、複数のSSHセッションおよびSSHトンネルを使用して、NGINXアプリケーションとMySQLデータベース・サービスに対して同時に機能することに注意してください。
タスク8: すべてのアプリケーションおよびサービスのクリーン・アップ
-
次のコマンドを実行して、デプロイされたNGINXアプリケーションおよび関連サービスをクリーン・アップします。
kubectl get pods kubectl delete service my-nginx-svc -n default kubectl get pods kubectl get svc kubectl delete deployment my-nginx --namespace default kubectl get svc
-
次のコマンドを実行して、デプロイされたMySQLデータベース・サービスおよび関連するサービス、ストレージおよびパスワードをクリーン・アップします。
kubectl delete deployment,svc mysql kubectl delete pvc mysql-pv-claim kubectl delete pv mysql-pv-volume kubectl delete secret mysql-secret
-
次のイメージは、クリーンな環境が再度存在し、やり直すことができる、これまでに行ってきたデプロイメントを示しています。
次のステップ
OKEクラスタへのアクセスを保護することは、最新のアプリケーション開発において重要なステップであり、SSHトンネリングは堅牢で簡単なソリューションを提供します。このチュートリアルのステップを実装することで、開発者はリソースを保護し、ワークフローを合理化し、複数のアプリケーションの機密接続を制御できます。SSHトンネリングをOKE設定に統合すると、セキュリティが向上するだけでなく、パブリック・インターネットへのリソースの公開に関連するリスクも最小限に抑えられます。これらの演習を実施することで、OKEクラスタを自信を持って利用し、スケーラブルでセキュアかつ効率的なアプリケーションの構築に集中できます。
承認
- 作成者 - Iwan Hoogendoorn (OCIネットワーク・スペシャリスト)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Leverage SSH Tunneling with Oracle Cloud Infrastructure Kubernetes Engine for Secure Application Development
G21952-02
December 2024