アプリケーションの外部公開・必要な設定のデプロイ

1. NGINX Ingress Controllerの設定

外部からアプリケーションに接続するため、NGINX Ingress Controllerを設定します。 また、今回はNIC、NAP WAFのログをGrafana Lokiで管理するため、すでに設定したLokiの設定に合わせたフォーマットでログを出力するよう設定します。

cd ~/f5j-nginx-observability-lab/prep/nic
# for access observability tools
kubectl apply -f monitor-jaeger-vs.yaml
kubectl apply -f monitor-loki-grafana-vs.yaml
kubectl apply -f monitor-prometheus-vs.yaml

# for changing NIC custom log format
kubectl apply -f nic1-custom_log_format.yaml
kubectl apply -f nic2-custom_log_format.yaml

デプロイした結果を確認します

kubectl get vs -A
実行結果サンプル
1
2
3
4
NAMESPACE   NAME              STATE   HOST                   IP    PORTS   AGE
monitor     loki-grafana-vs   Valid   grafana.example.com                  26s
monitor     jaeger-vs         Valid   jaeger.example.com                   32s
monitor     prometheus-vs     Valid   prometheus.example.com               40s

踏み台ホストのブラウザ(Chrome)よりそれぞれのサービスのURLへアクセスいただくことにより、画面をご覧頂くことが可能です。

2. Grafana Datasouce の追加

踏み台サーバのデスクトップのショートカットから Chrome を実行し、以下のURLにアクセスします

ログイン画面が表示されます。

../../_images/grafana-login.jpg

Grafanaにログインするためにパスワードの情報を取得します。

kubectl get secret --namespace monitor loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
実行結果サンプル
1
jFQSgKatKfJQ816K81qkPYIB2v6FvYjyAPE5mnpt

ユーザ名 admin 、そして確認したパスワードを入力しログインしてください

../../_images/grafana-login2.jpg

画面左メニューの Configuration (歯車のマーク) > DataSource を開き、 Add data source をクリックしてください

../../_images/grafana-add-datasource.jpg

DataSourceにPrometheusの追加をします

../../_images/grafana-add-prometheus.jpg

URL に http://prometheus-server と入力し、 Save & test をクリックしてください

../../_images/grafana-add-prometheus2.jpg

DataSourceにJaegerの追加をします

../../_images/grafana-add-jaeger.jpg

URL に http://jaeger-query:16686 と入力し、 Filter by Trace IDFilter by Span IDEnable Node Graph を有効にしてください。 その後、 Save & test をクリックしてください。

../../_images/grafana-add-jaeger2.jpg

Lokiはデプロイ時点で設定されています。以下のような結果になることを確認してください

../../_images/grafana-datasource-list.jpg ../../_images/grafana-loki.jpg

3. サンプルアプリケーションのデプロイ

サンプルアプリケーションに必要となる、NGINX Ingress Controllerを設定します。

# for access bookinfo application with NAP WAF / custom log format
kubectl apply -f simple-ap.yaml -n staging
kubectl apply -f ap-logconf.yaml -n staging
kubectl apply -f waf.yaml -n staging
kubectl apply -f staging-bookinfo-nap-vs.yaml

デプロイした結果を確認します

kubectl get vs -A
実行結果サンプル
1
2
3
4
5
NAMESPACE   NAME              STATE   HOST                   IP    PORTS   AGE
monitor     loki-grafana-vs   Valid   grafana.example.com                  26s
monitor     jaeger-vs         Valid   jaeger.example.com                   32s
monitor     prometheus-vs     Valid   prometheus.example.com               40s
staging     bookinfo-vs       Valid   bookinfo.example.com                 96s
kubectl get aplogconf,appolicy,policy -n staging
実行結果サンプル
1
2
3
4
5
6
7
8
NAME                                  AGE
aplogconf.appprotect.f5.com/logconf   83s

NAME                                   AGE
appolicy.appprotect.f5.com/simple-ap   87s

NAME                              STATE   AGE
policy.k8s.nginx.org/waf-policy   Valid   80s

NSM Labで利用した bookinfo のアプリケーションをデプロイします。 詳細は NSM サンプルアプリケーションのデプロイ を参照してください

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.13/samples/bookinfo/platform/kube/bookinfo.yaml -n staging
kubectl get pod -n staging
実行結果サンプル
1
2
3
4
5
6
7
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-7f4669bdd9-87hp5       2/2     Running   0          2m21s
productpage-v1-5586c4d4ff-mjsr9   2/2     Running   0          2m20s
ratings-v1-6cf6bc7c85-zzbsc       2/2     Running   0          2m21s
reviews-v1-7598cc9867-djmm8       2/2     Running   0          2m21s
reviews-v2-6bdd859457-gt6wb       2/2     Running   0          2m21s
reviews-v3-6c98f9d7d7-f8jk8       2/2     Running   0          2m21s