附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
使用 Oracle Cloud Infrastructure Kubernetes Engine 的 SSH 通道進行安全的應用程式開發
簡介
當我與 OKE 合作使用 Ali Mukadam 的說明取得 SSH 通道時,我稱之為「魔術」。
他用下列訊息回應我:
「你稱之為魔術,其他人稱之為科學。我是其中一人,也一樣。」
原始報價來自 Thor 影片:
「您的祖先把它稱為「魔術」,但你稱之為「科學」。我從他們身處同一處的土地出發。」
這個魔術是什麼?
在現代化應用程式開發中,保護本機和雲端資源之間的連線至關重要,尤其是在使用 Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes 引擎或 OKE) 時。SSH 通道提供簡單但功能強大的方式,以安全的方式連線至 OKE 叢集,讓開發人員無須向公用網際網路公開資源,即可管理資源並與其互動。本教學課程探討如何設定與 OKE 的 SSH 通道,以及開發人員如何將此方法整合至工作流程中,以提升安全性和效率。從最初的組態到最佳做法,我們將涵蓋在 OKE 型應用系統中有效運用 SSH 通道所需的一切。
下圖說明 SSH 通道兩個不同應用程式的完整流量。
目標
- 運用 OKE 的 SSH 通道進行安全的應用程式開發。
作業 1:在 OKE 上部署 Kubernetes 叢集 (使用堡壘主機和操作員執行處理)
確定 OKE 上已部署 Kubernetes 叢集。
-
若要在 OKE 上部署 Kubernetes 叢集,請使用下列其中一種方法:
-
使用 Oracle Cloud Infrastructure Kubernetes Engine 使用 Terraform 部署 Kubernetes 叢集:使用 Terraform 在 OKE 上部署單一 Kubernetes 叢集。
-
使用 Terraform 在不同 OCI 區域之間使用 OKE 部署多個 Kubernetes 叢集,並使用 RPC 建立完整網狀組織網路:使用 Terraform 在 OKE 的多個區域部署多個 Kubernetes 叢集。
-
作業 1:建立新的 Kubernetes 叢集並驗證元件:使用快速建立模式在 OKE 上部署 Kubernetes 叢集。
-
作業 1:使用 OKE 部署 Kubernetes 叢集:使用自訂建立模式在 OKE 上部署 Kubernetes 叢集。
在本教學課程中,我們將使用使用 Oracle Cloud Infrastructure Kubernetes Engine 將 Kubernetes 叢集與 Terraform 部署作為 OKE 上的基礎 Kubernetes 叢集,說明我們如何使用 SSH 通道存取部署於 OKE 和 localhost 的容器型應用程式。
讓我們快速複查 OCI OKE 環境以設定階段。
-
-
虛擬雲端網路 (VCN)
登入 OCI 主控台,瀏覽至網路和虛擬雲端網路。
-
複查 VCN 惡作劇。
-
按一下呼叫 VCN。
-
-
子網路
前往 VCN 詳細資訊頁面。
- 按一下子網路。
- 複查部署的子網路。
-
閘道
前往 VCN 詳細資訊頁面。
- 按一下網際網路閘道。
- 複查建立的網際網路閘道。
- 按一下 NAT 閘道。
- 複查建立的 NAT 閘道。
- 按一下服務閘道。
- 複查建立的服務閘道。
- 按一下安全清單。
- 複查建立的安全清單。
-
節點集區
瀏覽至開發人員服務和容器和使用者自建物件。
- 按一下 Kubernetes 叢集 (OKE) 。
- 按一下啟動叢集。
- 按一下節點集區。
- 複查節點集區。
-
執行處理
瀏覽至運算和執行處理。
- 按一下執行處理。
- 檢閱 Kubernetes 工作者節點部署。
- 複查堡壘主機部署。
- 複查 Kubernetes Operator 部署。
-
下圖說明本教學課程其餘內容的起點完整概述。
-
下圖說明上圖的簡化檢視。本教學課程其餘部分將使用此圖。
作業 2:在 Kubernetes 叢集上部署 NGINX Web 伺服器
操作員無法從網際網路直接存取,我們必須透過堡壘主機進行存取。
-
在本教學課程中,我們使用 Ali Mukadam 提供的 SSH 命令檔,使用單一 SSH 命令連線至運算子。此處提供此命令檔和連線方法:作業 4:使用堡壘主機和運算子檢查連線。本教學課程之後將需要此命令檔,以確保使用該命令檔。
-
設定 Kubernetes 運算子的 SSH 階段作業。
-
使用
kubectl get nodes
指令複查作用中的 Worker 節點。 -
複查所有有效的「職工節點」。
-
-
若要建立在容器內執行的範例 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 主控台中的負載平衡器物件,請瀏覽至網路、負載平衡器,然後按一下負載平衡器。
-
下圖說明我們到目前為止所進行的部署。請注意,已新增負載平衡器。
測試新的 Pod/ 應用程式
-
方法 1:從臨時 Pod
為了測試新部署的 NGINX 應用程式是否使用負載平衡器類型的服務,我們可以使用暫時 Pod 進行內部連線測試。
有多種測試應用程式連線的方式,其中一種方法是開啟瀏覽器並測試您是否可以存取網頁。但當我們沒有可用的瀏覽器時,我們可以部署暫時 Pod 來進行另一個快速測試。
若要建立暫時 Pod 並用於連線測試,請參閱工作 3:部署範例 Web 應用程式和服務。
-
執行下列命令:
-
取得內部負載平衡器服務的 IP 位址。
kubectl get svc
-
部署範例 Pod 以測試 Web 應用程式連線。
kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh
-
使用 wget 測試 Web 伺服器的連線。
wget -qO- http://<ip-of-internal-lb-service>
-
請注意 Web 伺服器傳回的 HTML 程式碼,使用內部負載平衡服務確認 Web 伺服器與連線運作。
-
-
執行下列命令以結束暫時 Pod。
exit
請注意,pod 在關閉指令行介面之後會立即刪除。
-
下圖說明我們到目前為止所進行的部署。請注意,暫時部署的 Pod 正在連線至負載平衡器 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
命令以編輯組態檔。 -
在主機 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 視窗中,請注意輸出已變更,一行新增了處理 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
命令以編輯組態檔。 -
在主機 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 。
-
再次使用 Script 開啟新的終端機至運算子。保持另一個終端機開啟。
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 位址 (當我們正在通道流量時為 localhost)。 - 連接埠:輸入要作為
8306
的連接埠,這是我們用於 MySQL 資料庫服務之本機通道轉送的連接埠。 - 按一下測試連線。
- 密碼:輸入您在
mysql-secret.yaml
檔案中指定的密碼。 - 然後按一下確定。
-
按一下仍要繼續,忽略連線警告。MySQL Workbench 應用程式版本與部署的 MySQL 資料庫服務版本可能不相容,因此會出現此警告。
- 請注意,連線訊息成功。
- 然後按一下確定。
- 按一下確定以儲存 MySQL 連線。
-
按一下儲存的 MySQL 連線以開啟階段作業。
-
請注意請稍候 ... 訊息。
-
按一下仍要繼續,忽略連線警告。
-
執行下列 SQL 查詢以設定資料庫服務內所有 MySQL 資料庫的清單。
SHOW DATABASES;
-
按一下閃電圖示。
-
請注意 MySQL 資料庫服務內所有 MySQL 資料庫的輸出。
-
-
在運算子 SSH 視窗中,請注意輸出已變更,一行新增了處理 8306 的連線。
-
有多個項目,因為我們建立多個連線,每個連線一個:
- 測試。
- 實際連線。
- SQL 查詢。
- 我們稍早的測試 (其他)。
-
我們現在可以向操作員開啟多個 SSH 階段作業,並為不同的應用程式同時執行多個通道命令。請注意下列視窗。
- 具有 MySQL 資料庫服務之通道命令的 SSH 終端機。
- 使用本機電腦的 MYSQL Workbench 應用程式與本機主機 IP 位址
127.0.0.1
的 MySQL 資料庫服務連線。 - 使用 NGINX 應用程式之通道命令的 SSH 終端機。
- 使用本機電腦的 Safari Internet 瀏覽器連線到使用 localhost IP 位址
127.0.0.1
的 NGINX 應用程式。
-
下圖說明我們到目前為止所進行的部署。請注意,本機 IP 位址的通道連線會同時用於 NGINX 應用程式和 MySQL 資料庫服務,同時使用多個 SSH 階段作業和 SSH 通道。
作業 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
G21956-02
December 2024