概要
Job管理ツールのRundeckをOCIに導入しました。
Rundeck準備編、Job実行編とRundeck運用編と3つのパートに分けています。
Rundeck準備編←今ココ
Job実行編
Rundeck運用編
構成
VM作成前準備
OCI公式ガイド等を参照しながら各リソースを準備します。
- VCN
- 管理対象VMやLoad balancerを設置するPublic subnet
- Rundeckを設置するPrivate subnet
- Public subnetにInternet Gatewayを追加
- Public subnetのRoute tableにデフォルトルートをInternet Gatewayに向くよう設定
- Public subnetのSecurity listに必要な通信許可を設定
- Private subnetにNAT Gatewayを追加
- Private subnetのRoute tableにデフォルトルートをNAT Gatewayに向くよう設定
- Private subnetのSecurity listに送信元IP 0.0.0.0/0, 宛先IP 0.0.0.0/0のOutbound通信を許可
- Private subnetのSecurity listに送信元IPをOpretator subnet, 宛先Port 4440のInbound通信を許可
VM作成
Instance System Requirementsを参考にしてVMを作成します
- OCIコンソールのナビゲーションメニューからコンピュート>>インスタンスを選択して「インスタンスの作成」を押下
- 名前を設定

- OSイメージとシェイプを設定

- Network設定

- SSHキー設定

- ブートボリューム設定

- 「作成」を押下
(オプション)プライベートDNSを使用したホスト名アクセス
外部ネットワークからサーバーに名前でアクセスする場合はVCN内にリスニングのエンドポイントを作成します。作成後、外部ネットワークDNSからエンドポイントにフォワードすることによって名前解決が可能です。
リゾルバ・エンドポイントの作成
時刻設定
時刻をJSTに変更して再起動します。
[user@linux-rundeck]$ sudo timedatectl set-timezone Asia/Tokyo
[user@linux-rundeck]$ sudo timedatectl
Local time: Tue 2024-01-09 01:12:09 JST
Universal time: Mon 2024-01-08 16:12:09 UTC
RTC time: Mon 2024-01-08 16:12:09
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[user@linux-rundeck]$ sudo reboot
OCI CLIインストールおよびPython確認
JobのShell実行用にOCI CLIをインストールしてPythonバージョンを確認します。
Oracle Cloud Infrastructureドキュメント CLIのインストール
# インストール後の確認
[user@linux-rundeck]$ oci -v
3.37.1
[user@linux-rundeck]$ python --version
Python 3.6.8
Rundeck インストール
ガイドを参照してRundeckを導入します。
Installing on Red Hat, Amazon or Oracle Linux distributions
導入後rundeckを起動できることを確認します。
- 導入後の確認
[root@linux-rundeck]# service rundeckd start
Starting rundeckd (via systemctl): [ OK ]
[root@linux-rundeck]# service rundeckd status
● rundeckd.service - SYSV: rundeckd, providing rundeckd
Loaded: loaded (/etc/rc.d/init.d/rundeckd; generated)
Active: active (running) since Tue 2024-01-09 09:42:49 JST; 5s ago
[user@linux-rundeck opc]# netstat -an | grep 4440
tcp6 0 0 :::4440 :::* LISTEN
- tcp/4440でlistenするためFirewallを許可
[root@linux-rundeck]# firewall-cmd --add-port=4440/tcp --zone=public --permanent
success
[root@linux-rundeck]# firewall-cmd --reload
success
[root@linux-rundeck]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: dhcpv6-client ssh
ports: 4440/tcp
Rundeckプロファイル設定
デフォルトではローカルアクセスのみのため、プロファイルを編集してサービス再起動してアクセスできることを確認します。
- プロファイル編集と再起動
[root@linux-rundeck]# vi /etc/rundeck/rundeck-config.properties
grails.serverURL=http://【IPアドレスまたはhost名】:4440
[root@linux-rundeck]# vi /etc/rundeck/framework.properties
framework.server.name = 【IPアドレスまたはhost名】
framework.server.hostname = 【IPアドレスまたはhost名】
framework.server.port = 4440
framework.server.url = http://【IPアドレスまたはhost名】:4440
[root@linux-rundeck]# service rundeckd restart
- アクセス確認

(オプション)httpsオフロード
今回はRundeckへのWebアクセスは閉域網からのアクセスを想定しています。
しかし、http通信なのでusername/password等の通信内容は暗号化されていません。
セキュリティ上考慮が必要な場合はhttps通信に切り替えが可能です。
WAN通信を暗号化する場合はOCI Loadbalancerでhttpsオフロードすることによりrundeckの負担を軽減することが可能です。
- Loadbalancer設定
OCI LoadBalancerを使ってNATとSSL/TLS終端を行うを参考にLoadbalancerを設定 - プロファイル編集と再起動
[root@linux-rundeck]# vi /etc/rundeck/rundeck-config.properties
grails.serverURL=https://【ドメイン名】:4430
server.useForwardHeaders=true
[root@linux-rundeck]# vi /etc/rundeck/framework.properties
framework.server.name = 【host名】
framework.server.hostname = 【host名】
framework.server.port = 4440
framework.server.url = http://【host名】:4440
framework.rundeck.url = https://【ドメイン名】:4430
[root@linux-rundeck]# service rundeckd restart
(オプション)adminパスワード変更、ユーザー追加
adminの初期パスワードはadminなので必要に応じて
Authenticating Usersを参考にパスワードを変更します。
ユーザーを追加する場合は、上記に加えてaclpolicyファイルをAccess Control Policyを参考に作成します。
[root@linux-rundeck]# vi /etc/rundeck/realm.properties
admin:【パスワード】,user,admin,architect,deploy,build
#ユーザーを追加する場合はユーザー名:パスワード,グループを追加
user1:【パスワード】,user
#user1が所属するグループuserのaclpolicyを作成
[root@linux-rundeck]# vi /etc/rundeck/user.aclpolicy
description: user
context:
project: '【Project】' #後述するProjectと一致させる
for:
resource:
- allow: [read] # allow read all kinds
adhoc:
- allow: [read] # allow read adhoc jobs
job:
- allow: [read,run,kill] # allow readr/run/kill of all jobs
node:
- allow: [read,run] # allow read/run for all nodes
by:
group: user
---
description: user
context:
application: 'rundeck'
for:
project:
- match:
name: '【Project】' #後述するProjectと一致させる
allow: [read] # allow read of 【Project】
by:
group: user
Project作成
Jobを登録するためのProjectを作成します。
- adminでログイン後Create New Projectを押下
- Project name等を入力し作成
rundeck-cliインストール
rundeck運用のためrundeck-cliツールをRundeck CLI - Installを参考にインストールします。
- rundeck-cliインストール
[root@linux-rundeck]# curl https://raw.githubusercontent.com/rundeck/packaging/main/scripts/rpm-setup.sh 2> /dev/null | bash -s rundeck
[root@linux-rundeck]# dnf install rundeck-cli
- rundeck-cli定義ファイル作成
[root@linux-rundeck]# vi rd.conf
export RD_URL=http://【host名】:4440
export RD_USER=admin
export RD_PASSWORD=【パスワード】
- rundeck-cliの確認
[root@linux-rundeck]# export RD_CONF=/path/to/rd.conf
[root@linux-rundeck]# rd system info
#システム情報が表示されればOK
Rundeck準備編はここまでです。
次はJob実行編にてJobを登録します。