2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Install Kong API Gateway on RKE2

Last updated at Posted at 2024-10-29

この記事は、Kong をRKE2上にインストールする手順をメモします。

RKE2のインストール

RKE2 Server

root@ip-10-0-25-27:~# curl -sfL https://get.rke2.io | sh -
[INFO]  finding release for channel stable
[INFO]  using v1.30.5+rke2r1 as release
[INFO]  downloading checksums at https://github.com/rancher/rke2/releases/download/v1.30.5+rke2r1/sha256sum-amd64.txt
[INFO]  downloading tarball at https://github.com/rancher/rke2/releases/download/v1.30.5+rke2r1/rke2.linux-amd64.tar.gz
[INFO]  verifying tarball
[INFO]  unpacking tarball file to /usr/local
root@ip-10-0-25-27:~# systemctl enable rke2-server.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/rke2-server.service → /usr/local/lib/systemd/system/rke2-server.service.
root@ip-10-0-25-27:~#

後処理

# RKE2 Agentが利用するTokenファイル
cat /var/lib/rancher/rke2/server/node-token
# 同時にインストールされるkubectlのパス
cp /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/
# kubeconfigのファイルパス
mkdir .kube
cp /etc/rancher/rke2/rke2.yaml .kube/config

RKE2 agent

別ノードでインストールする必要があります。

root@ip-10-0-25-118:~# curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
[INFO]  finding release for channel stable
[INFO]  using v1.30.5+rke2r1 as release
[INFO]  downloading checksums at https://github.com/rancher/rke2/releases/download/v1.30.5+rke2r1/sha256sum-amd64.txt
[INFO]  downloading tarball at https://github.com/rancher/rke2/releases/download/v1.30.5+rke2r1/rke2.linux-amd64.tar.gz
[INFO]  verifying tarball
[INFO]  unpacking tarball file to /usr/local
root@ip-10-0-25-118:~# systemctl enable rke2-agent.service 
Created symlink /etc/systemd/system/multi-user.target.wants/rke2-agent.service → /usr/local/lib/systemd/system/rke2-agent.service.

サービスを起動する前に、/etc/rancher/rke2/config.yamlを設定

server: https://<server address>:9345
token: <token>

その後にagent起動

root@ip-10-0-25-118:~# systemctl start rke2-agent.service

kubectlでクラスタの状態を確認

root@ip-10-0-25-27:~# kubectl get node 
NAME             STATUS     ROLES                       AGE     VERSION
ip-10-0-25-27    Ready      control-plane,etcd,master   2m46s   v1.30.5+rke2r1
ip-10-0-25-118   Ready      <none>                      79s     v1.30.5+rke2r1

kongのインストール

基本的に以下のURLのままで進めば大丈夫ですが、いつくか注意すべきポイントがあります。
https://docs.konghq.com/gateway/latest/install/kubernetes/proxy/

StorageClassの指定

もしPostgreのPodも一緒にインストールする場合、以下のようにPendingのままで先に進めない時があります。

root@ip-10-0-25-27:~# kubectl get pod -n kong
NAME                                 READY   STATUS     RESTARTS   AGE
kong-cp-kong-7f9bf4f756-s98p4        0/1     Init:1/2   0          45s
kong-cp-kong-init-migrations-mglgs   0/1     Init:0/1   0          45s
kong-cp-postgresql-0                 0/1     Pending    0          45s

原因はPVCが作られないからです。

root@ip-10-0-25-27:~# kubectl describe pod kong-cp-postgresql-0 -n kong
Name:             kong-cp-postgresql-0
Namespace:        kong
<...>
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  64s   default-scheduler  0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.
root@ip-10-0-25-27:~# kubectl get pvc -n kong
NAME                        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
data-kong-cp-postgresql-0   Pending                                                     <unset>                 2m2s

StorageClassをインストールすれば解決されます。他のものもOKですが、Rancherも以下のものを提供しているので利用しました。

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.30/deploy/local-path-storage.yaml

インストールが終わったら以下のコマンドでPVCを開いて、storageClassName: local-pathspecの下に追加します。

kubectl edit pvc data-kong-cp-postgresql-0 -n kong

これでPVCが無事プロビジョニングされ、Kong Control Planeのインストールも無事終わります。

root@ip-10-0-25-27:~# $ kubectl -n local-path-storage get pod
NAME                                     READY     STATUS    RESTARTS   AGE
local-path-provisioner-d744ccf98-xfcbk   1/1       Running   0          7m

root@ip-10-0-25-27:~# kubectl get pod -n kong
NAME                                 READY   STATUS     RESTARTS   AGE
kong-cp-postgresql-0                 1/1     Running    0          5m15s
kong-cp-kong-init-migrations-mglgs   0/1     Completed         0          5m38s
kong-cp-kong-7f9bf4f756-s98p4        1/1     Running           0          5m50s

Data Planeへのアクセス

素のRKE2なら、dpのkong-proxyEXTERNAL-IPがずっとPending状態になります。

root@ip-10-0-25-27:~# kubectl get svc kong-dp-kong-proxy -n kong
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kong-dp-kong-proxy   LoadBalancer   10.43.148.174   <pending>     80:30153/TCP,443:30749/TCP   57m

LoadBalancerは基本的にNodePortと同じなので、DPがデプロイされたノードのアドレスと、右側のNodePortにアクセスすれば問題ない

root@ip-10-0-25-27:~# curl http://localhost:30153
{
  "message":"no Route matched with those values",
  "request_id":"7cfd8d2697b06377501cf2385fac4076"
}

以上、自分へのメモ書きでした。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?