ワンショットのデモをやることになったので、環境構築手順をメモ。
各種資材は 2019 年 10 月ごろのものなので最新化しなきゃ…
前提
- OS: Windows10 Pro
- Docker: Docker version 19.03.8, build afacb8b
- 使用する Docker イメージ:
Azure へログイン
PowerShell で mikoto2000/aks-tools
イメージを起動。
mikoto2000/aks-tools
コンテナ内でで Azure へログインする。
URL と code が表示される。Web ブラウザで表示された URL にアクセスし、 表示されたページのコード入力欄に code を入力。
Kubernetes クラスタ作成
mikoto2000/aks-tools
コンテナ内ででクラスタを作成する。
# 必要な情報整理
RESOURCE_GROUP="DemoOf20200612"
AKS_NAME="eclipse-che"
# リソースグループ作成
az group create --name ${RESOURCE_GROUP} --location japaneast
# Kubernetes クラスタ作成
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-vm-size Standard_DS3_v2 --node-count 1 --enable-addons monitoring --generate-ssh-keys
# 認証情報コピー
az aks get-credentials --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP}
kubectl config current-context
Ingress デプロイ
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/2de5a893aa15f14102d714e918b0045b960ad1a5/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/2de5a893aa15f14102d714e918b0045b960ad1a5/deploy/static/provider/cloud-generic.yaml
ingress-nginx の LoadBalancer に EXTERNAL-IP が割り当てられるまで待つ。
bash-4.4# kubectl get pods --namespace ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-69969b98db-phzwc 1/1 Running 0 101s
bash-4.4# kubectl get services --namespace ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx LoadBalancer 10.0.145.198 13.78.112.61 80:31420/TCP,443:30253/TCP 102s
Ingress の公開 IP アドレスをメモ。
DOMAIN_IP=$(kubectl get services --namespace ingress-nginx -o jsonpath='{.items[].status.loadBalancer.ingress[0].ip}')
DOMAIN="$(echo ${DOMAIN_IP} | sed -e "s/\./-/g").nip.io"
証明書作成
下準備
mikoto2000/openssl
を使用して証明書を作成。
cd ${WORK_DIR}
mkdir che_demo_ca
cd .\che_demo_ca
curl https://raw.githubusercontent.com/mikoto2000/docker-images/2fb7b9f119f65aec12ccc8db364bebeba8201090/openssl/docker-compose.yml -OutFile .\docker-compose.yml
mkdir usr_lib_ssl
curl https://raw.githubusercontent.com/mikoto2000/docker-images/2fb7b9f119f65aec12ccc8db364bebeba8201090/openssl/usr_lib_ssl/openssl.cnf -OutFile .\usr_lib_ssl\openssl.cnf
curl https://raw.githubusercontent.com/mikoto2000/docker-images/2fb7b9f119f65aec12ccc8db364bebeba8201090/openssl/usr_lib_ssl/v3_ca.txt -OutFile .\usr_lib_ssl\v3_ca.txt
docker-compose run --rm openssl bash
コンテナ内で証明書作成
# 必要な情報整理
## ドメイン定義
DOMAIN_IP="20.37.126.225"
DOMAIN="$(echo ${DOMAIN_IP} | sed -e "s/\./-/g").nip.io"
## SAN 設定作成
echo "subjectAltName = @alt_names" >> ./usr_lib_ssl/v3.txt
echo "" >> ./usr_lib_ssl/v3.txt
echo "[ alt_names ]" >> ./usr_lib_ssl/v3.txt
echo "DNS.1 = "'*'".${DOMAIN}" >> ./usr_lib_ssl/v3.txt
## 各種生成物定義
CA_KEY_FILE="/ca/private/cakey.pem"
CA_CSR_FILE="/ca/ca.csr"
CA_CRT_FILE="/ca/cacert.pem"
CA_COUNTRY="JP"
CA_STATE="KEN"
CA_LOCALITY="KU"
CA_ORGANIZATION="KOJIN"
CA_ORGANIZATION_UNIT="NONE"
CA_COMMON="${DOMAIN}"
CA_EMAIL="mikoto2000@gmail.com"
# CA 初期化
cd /ca
## 各種ディレクトリ作成
mkdir cert private crl newcerts
chmod 700 private
## シリアル初期化
echo "01" | tee -a serial
## crlnumber 初期化
echo "01" | tee -a crlnumber
## インデックス初期化
touch index.txt
echo "unique_subjec = yes" > index.txt.attr
# CA 鍵と CA 証明書作成
## CA 用秘密鍵作成
openssl genrsa -out ${CA_KEY_FILE} 2048
## CA 証明書要求作成
CA_SUBJECT="/C=${CA_COUNTRY}/ST=${CA_STATE}/L=${CA_LOCALITY}/O=${CA_ORGANIZATION}/OU=${CA_ORGANIZATION_UNIT}/CN=${CA_COMMON}"
openssl req -new -key ${CA_KEY_FILE} -out ${CA_CSR_FILE} -subj "${CA_SUBJECT}"
## CA 証明書要求確認
openssl req -noout -text -in ${CA_CSR_FILE}
## CA 証明書作成
openssl x509 -req -in ${CA_CSR_FILE} -signkey ${CA_KEY_FILE} -out ${CA_CRT_FILE} -extfile /usr/lib/ssl/v3_ca.txt
## CA 証明書確認
openssl x509 -text -noout -in ${CA_CRT_FILE}
## CA 証明書を out ディレクトリへコピー
cp ${CA_CRT_FILE} /client/ca.crt
# サーバー証明書発行
SERVER_COMMON="${DOMAIN}"
SERVER_KEY_FILE="/client/${SERVER_COMMON}.key"
SERVER_CSR_FILE="/client/${SERVER_COMMON}.csr"
SERVER_CRT_FILE="/client/${SERVER_COMMON}.crt"
SERVER_COUNTRY="JP"
SERVER_STATE="KEN"
SERVER_LOCALITY="KU"
SERVER_ORGANIZATION="KOJIN"
SERVER_ORGANIZATION_UNIT="NONE"
SERVER_COMMON="${DOMAIN}"
SERVER_EMAIL="mikoto2000@gmail.com"
## サーバー秘密鍵作成
openssl genrsa -out ${SERVER_KEY_FILE} 2048
## サーバー証明書要求作成
SERVER_SUBJECT="/C=${SERVER_COUNTRY}/ST=${SERVER_STATE}/L=${SERVER_LOCALITY}/O=${SERVER_ORGANIZATION}/OU=${SERVER_ORGANIZATION_UNIT}/CN=${SERVER_COMMON}"
openssl req -new -key ${SERVER_KEY_FILE} -out ${SERVER_CSR_FILE} -subj "${SERVER_SUBJECT}"
## クライアント証明書要求確認
openssl req -noout -text -in ${SERVER_CSR_FILE}
# サーバー証明書作成
cd /client
yes | openssl ca -out ${SERVER_CRT_FILE} -extfile /usr/lib/ssl/v3.txt -infiles ${SERVER_CSR_FILE}
※ DOMAIN_IP
: mikoto2000/aks-tools
でメモした EXTERNAL-IP
Kubernetes に証明書を設定
mikoto2000/aks-tools
コンテナ内での作業。
kubectl create namespace che
kubectl create secret generic self-signed-cert --from-file=/work/che_demo_ca/client/ca.crt -n che
kubectl create secret tls che-tls -n che --key=/work/che_demo_ca/client/${DOMAIN}.key --cert=/work/che_demo_ca/client/${DOMAIN}.crt
デプロイ
ソースコード取得
tiller のインストール
che デプロイ
devfile-registry の修正
quay.io/eclipse/che-devfile-registry:nightly
-> mikoto2000/che-devfile-registry:ET2019
.
plugin-registry の修正
quay.io/eclipse/che-plugin-registry:nightly
-> mikoto2000/che-plugin-registry:ET2019
.
デプロイ
helm repo update
helm dependency update
helm upgrade --install che --namespace che --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${DOMAIN} --set global.tls.enabled=true --set global.tls.useSelfSignedCerts=true --set cheImage="eclipse/che-server:7.4.0" --set global.multiuser=true ./
che-plugin-registry
と che-devfile-registry
が 7.4.0
向けなので che-server
もそれに合わせる。
動作確認
- 作成した
ca.crt
をブラウザにインポート https://che-keycloak.$DOMAIN
へ接続して管理者設定・ユーザー追加https://che-che.$DOMAIN
へ接続してログイン
余裕があったら別記事で手順を書く。
後片付け
mikoto2000/aks-tools
で以下コマンドを実行。
以上。
0 件のコメント:
コメントを投稿