IK.AM

@making's tech note


TAP GUIをスケールアウトする際のworkaround

🗃 {Dev/CaaS/Kubernetes/TAP}
🏷 Kubernetes 🏷 TAP GUI 🏷 Tanzu 🏷 TAP 🏷 ytt 
🗓 Updated at 2022-12-20T09:06:14Z  🗓 Created at 2022-12-20T09:04:22Z   🌎 English Page

⚠️ 本記事の内容はVMwareによってサポートされていません。 記事の内容で生じた問題については自己責任で対応し、 VMwareサポート窓口には問い合わせないでください

TAP 1.3からTAP GUIのスケールアウトがサポートされました。tap-values.yamlに次のようにreplicasを設定できます。

tap_gui:
  deployment:
    replicas: 3

しかし、セッションはインスタンス間で共有されないため、 TAP GUIの認証を有効にしている場合、スケールアウトするとリクエストがラウンドロビンされ、 ログインが成功しても、ログインしていないインスタンスにルーティングされ、認証エラーが表示されることがあります。

TAP GUIがこの問題をfixするまでは、Contourの Session Affinity を利用して、同じログインユーザーが同じインスタンスにルーティングされるようにする必要があります。

TAP GUIのHTTPProxyに対してSession Affityを有効にするために次のoverlayを作成します。

cat EOF > tap-gui-session-affinity.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind":"HTTPProxy","metadata":{"name":"tap-gui"}})
---
spec:
  routes:  
  #@overlay/match by=overlay.subset({"services": [{"name": "server"}]}) 
  - services: []
    #@overlay/match missing_ok=True
    loadBalancerPolicy:
      strategy: Cookie
EOF

overlayをSecretに登録します

kubectl -n tap-install create secret generic tap-gui-session-affinity \
  -o yaml \
  --dry-run=client \
  --from-file=tap-gui-session-affinity.yaml\
  | kubectl apply -f-

作成したoverlayのSecret名をtap-values.yamlのpackage_overlaysへ次のように設定します

package_overlays:
# ...
- name: tap-gui
  secrets:
  - name: tap-gui-session-affinity
  # ...

packageinstallを更新します

tanzu package installed update -n tap-install tap -f tap-values.yaml

✒️️ Edit  ⏰ History  🗑 Delete