
目次
- 目次
- はじめに
- 関連記事
- OKEとは
- 構成図
- セキュリティ設定
- 事前準備
- 手順
- トラブルシューティング
- おわりに
- お知らせ
はじめに
こんにちは、クラウド事業部の照屋です。
今回はプライベートサブネットに構築したOKEの疎通確認を行いたいと思います。
OKEクラスタとOKEに接続しに行く踏み台サーバ(Bastion)はすでに構築済として進めていきます。
関連記事
Oracle Container Engine for Kubernetes(OKE)をプロビジョニングしよう
OKEとは
アプリを動かすための「専用の土台」をクラウド上で提供するサービスです。
開発したアプリを「コンテナ(小さな箱)」という単位で扱うことで、サーバーのセットアップや障害時の復旧、アクセスの増減に伴う性能調整などをすべてクラウド側に任せることができます。
これにより、運用コストを抑えながら、サービスを止めることなく安定して提供することが可能になります。
また、世界標準のオープン・ソース「Kubernetes」をベースにしているため、最新のクラウド技術を柔軟に取り入れながら、アプリの公開や管理をスピーディーに行うことができます。
Kubernetesエンジン(OKE)の概要
構成図
Kubernetes APIエンドポイント(OKEクラスタ)、ワーカーノード(VM)に対して疎通できるか確認します。
また、Nginxを稼働させたPodを作成し、外部からcurlによる疎通確認を行います。

セキュリティ設定
・Bastionサーバ用NSGには、ipconfigで確認した自分自身のGIPを許可しておきます。(ローカルからTera TermでSSH接続します)

・APIエンドポイント用NSGとワーカーノード用NSGには、BastionサーバのプライベートIPを許可しておきます。


事前準備
1.Bastionへログイン
ssh -i <秘密鍵> opc@[BastionのパブリックIP]
2.OCI CLIのインストール
下記dnfコマンドでインストールします。
※Oracle Linux 9の場合
sudo dnf install -y oracle-ocne-release-el9 sudo dnf config-manager --enable ol9_ocne sudo dnf install -y ocne
インストール済。
[opc@bation ~]$ oci -v 3.73.1
参考
3.kubectlのインストール
sudo dnf install kubectl
インストール済。
[opc@bation ~]$ kubectl version --client Client Version: v1.33.7+1.el9 Kustomize Version: v5.6.0
参考
手順
Kubernetes APIエンドポイントへの疎通確認
1.Kubernetesを操作するために必要なkubeconfigファイルを格納するディレクトリを作成
$ mkdir -p $HOME/.kube
2.Kubernetes APIエンドポイントに接続するために必要な情報を取得して、Kubeconfigファイルに書き込む
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.ap-tokyo-1.aaaaaaaa... --file $HOME/.kube/config --region ap-tokyo-1 --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT
3.kubectlファイルを読み込む
export KUBECONFIG=$HOME/.kube/config
4.kubectl の動作確認
[opc@bation ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 10.0.1.30 Ready node 2d18h v1.34.2
ワーカーノードが Ready 状態で表示されれば正常に起動しており、
OKEのAPIエンドポイントへの接続が成功したことになります。
すでにKubernetes が動くためのシステム Podも正常に稼働していることが確認できます。
[opc@bation ~]$ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-7b544c69cb-95vzd 1/1 Running 0 2d17h kube-system csi-oci-node-zq2wk 1/1 Running 1 2d18h kube-system kube-dns-autoscaler-56c78ff67-vcp2k 1/1 Running 0 2d17h kube-system kube-proxy-grnjb 1/1 Running 1 2d18h kube-system proxymux-client-jh98j 1/1 Running 1 2d18h kube-system vcn-native-ip-cni-s8drg 2/2 Running 2 2d18h
次に、ワーカーノード(VM)へも直接疎通確認を行ってみます。
ワーカーノード(VM)への疎通確認
1.BastionサーバにSSH鍵をアップロード
scpコマンドで事前にローカルからBastionサーバにSSH鍵をアップロードしておきます。
scp -i ssh-key-******.key ssh-key-******.key opc@168.138.215.251:~/.ssh/
2.ワーカーノード(VM)へのログイン確認
この鍵を使ってサーバにログインできるかを確認します。
[opc@bation .ssh]$ ssh -i ssh-key-******.key opc@10.0.1.30 The authenticity of host '10.0.1.30 (10.0.1.30)' can't be established. ED25519 key fingerprint is SHA256:lS3J73ei8F5Ml4y+8rOCZ5YnA2BGVCZGvdZBUHvcIdQ. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.0.1.30' (ED25519) to the list of known hosts. Activate the web console with: systemctl enable --now cockpit.socket [opc@oke-c3jths47lcq-nyt5fmy2ogq-sbke6szcnrq-1 ~]$
ログインに成功しました。
最後に、Podを立てて外部からアクセスできるか確認していこうと思います。
Nginx Podへの疎通確認
1.マニフェストファイル(YAML)の作成
マニフェストファイルを作成していきます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: docker.io/library/nginx:1.14.2
ports:
- containerPort: 80
参考
デプロイメントを使用してステートレスアプリケーションを実行する
2.Nginx Podをデプロイ
Podをデプロイしていきます。
[opc@bation ~]$ kubectl apply -f pod.yaml deployment.apps/nginx-deployment configured
3.Podの生存確認
Podが正常に起動しているかを確認します。
[opc@bation ~]$ kubectl get pods -l app=nginx NAME READY STATUS RESTARTS AGE nginx-deployment-75b6b65ddb-rjspq 0/1 ContainerCreating 0 6s nginx-deployment-bf744486c-jjcgp 0/1 ImageInspectError 0 6m54s nginx-deployment-bf744486c-ns6ms 0/1 ImageInspectError 0 6m54s [opc@bation ~]$ kubectl get pods -l app=nginx NAME READY STATUS RESTARTS AGE nginx-deployment-75b6b65ddb-rjspq 1/1 Running 0 14s nginx-deployment-75b6b65ddb-z9gvl 1/1 Running 0 7s
無事にノード上で Pod が動作していることが確認できました。
4.Nginxサービスへの外部アクセス
外部からPodで稼働中のNginxサービスにアクセスできるか確認していきます。
今回は最も簡単に確認できる方法として、
ポートフォワーディングする方法で実行していきます。
<注意>
下記コマンドだとフォアグラウンドで実行され、curlコマンドが打てなくなるので、
必ずバックグラウンドで動作させるようにしてください。
[opc@bation ~]$ kubectl port-forward deployment/nginx-deployment 8080:80 Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
↓
[opc@bation ~]$ kubectl port-forward deployment/nginx-deployment 8080:80 > /dev/null & [1] 434179 [opc@bation ~]$ curl http://localhost:8080Welcome to nginx! Welcome to nginx!If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
問題なくアクセスできました!
参考
トラブルシューティング
Kubernetes APIエンドポイントへの疎通確認のフェーズで、
手順を最後まで踏んだ後、kubectl get nodesを打つと、下記エラーが表示されました。
[opc@bation ~]$ kubectl get nodes E0130 08:11:06.144812 6741 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused" E0130 08:11:06.146447 6741 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused" E0130 08:11:06.147868 6741 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused" E0130 08:11:06.149339 6741 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused" E0130 08:11:06.150803 6741 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused" The connection to the server localhost:8080 was refused - did you specify the right host or port?
どうやらユーザー情報の紐づけがうまくできていない模様。。。
cat ~/.oci/configで設定情報を確認すると、
OCI コンソール画面の「ユーザー設定」に設定されているAPIキーと異なっていました。
[DEFAULT] user=ocid1.user.oc1..aaaaaaaa************************************************ fingerprint=d3:6a:*********************************** key_file=/home/opc/.oci/teruya_api_key.pem tenancy=ocid1.tenancy.oc1..aaaaaaaa************************************************ region=ap-tokyo-1
APIキーは、/home/opc/.ociディレクトリに格納されているため、
公開鍵をコピー、OCI コンソール画面の「ユーザー設定」>「APIキーの追加」から追加します。

もう一度、接続に必要な情報をKubeconfigファイルに書き込むと、Kubeconfigファイルへの書き込みが成功したようです。
[opc@bation ~]$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.ap-tokyo-1.aaaaaaaa... --file $HOME/.kube/config --region ap-tokyo-1 --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT New config written to the Kubeconfig file /home/opc/.kube/config
kubectl get nodesを打つと、正常に起動していることが確認できました。
[opc@bation ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 10.0.1.205 Ready node 92m v1.34.2
おわりに
今回は疎通確認のみでしたが、
次回はPodの挙動についても見ていきたいと思います。
お知らせ
私達クラウド事業部はクラウド技術を活用したSI/SESのご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。