OpenShiftとは?
コンテナを運用する基盤、KubernetesをEnterprise向けに拡張したものですね。
Routerとは?
OpenShift は Kubernetes のデフォルトの機能に加えて簡単に外部公開する仕組みが整っています。この仕組みをRouterと呼び、yamlで設定を書くことで簡単にアプリケーションを公開できるようになっています。
Routerの実装はha-proxyがベースになっており、コンテナ内部にあるhaproxy-config.templateからhaproxy.configを自動生成する仕組みになっています。
StickySessionの実現
OpenShiftのRouterはデフォルトでStickySessionがONになっています。
ha-proxyの設定で「cookie」という項目がありますが、これがランダムな名前で設定されます。
これをコントロールするには各アプリのRouterの設定yamlにannotationを設定します。
例えばStickySessionに使用するCookieの名称をランダムではなく、固定にしたい場合は~~~/cookie_nameというannotationを設定します。※cookie_nameの前の名称は忘れました。後で追記しときます。
Routerデフォルト動作の変更
Routerはdefaultプロジェクトに作成されている「Router」アプリケーションが実態です。このRouterのPodが起動しているNodeにDNS-RoundRobinで均等に割り振ることで動作しますが、RouterのDeploymentConfigに環境変数を設定することでデフォルト動作を変更することができます。
例えば、StickySessionを使用したくない場合は無効化する環境変数がありますのでこれを設定します。
まとめ
Router機能、仕組をしっかり理解して使いこなすにはha-proxyやDNS等の知識が欲しいところですが、理解できれば非常に便利です。
インフラを高度に抽象化して操作を簡単にした良い仕組と言えると思います。
現在OpenShiftの検証環境を運用しておりますが、今のところ一切Router起因の障害は経験しておらず、安定性も◎かと思います。
補足
適当に20分ほどで思い付きで書いた記事なので後で絵いれたりしれっと改変するかもしれません。