前提として今回の記事は AWS ALB Ingress Controller を使用していることを想定しています。
ALB Ingress Controller については以前書いた記事にのっているので、そちらを参考にしてください blog.hatappi.me
今回やりたかったこと
EKS のクラスタには2つのアプリケーションが動いています。
それぞれのホストを a.example.com
と b.example.com
からアクセスします。
それぞれのヘルスチェックが /app_a/healthcheck
, /app_b/healthcheck
で行えるので ALB のパスをそれぞれのパスに向けたいです。
準備
まずヘルスチェックの設定をする前のIngress リソースは次のような感じで定義します。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]' alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' spec: rules: - host: a.example.com http: paths: - path: /* backend: serviceName: ssl-redirect servicePort: use-annotation - path: /* backend: serviceName: app_a servicePort: 80 - host: b.example.com http: paths: - path: /* backend: serviceName: ssl-redirect servicePort: use-annotation - path: /* backend: serviceName: app_b servicePort: 80
a.example.com
にアクセスすると service: app_a にリクエストが流れ、b.example.com
にアクセスすると service: app_b にリクエストが流れます。
どちらのホストも http -> https のリダイレクトが行われます。
ただこのままではターゲットグループのヘルスチャックのパスはデフォルトの /
のまま。。。
どの設定するか
普通にドキュメントに書いてありました。
ヘルスチェックのパス指定である alb.ingress.kubernetes.io/healthcheck-path
はingressリソースだけでなくservice リソースでも定義できるようです。
つまりそれぞれのservice の annotation に次のような感じで設定すれば良さそうです。
apiVersion: v1 kind: Service metadata: name: app_a annotations: # 追加!!! alb.ingress.kubernetes.io/healthcheck-path: '/app_a/healthcheck' spec: ports: - port: 80 targetPort: 3000 protocol: TCP type: NodePort selector: app: app_a --- apiVersion: v1 kind: Service metadata: name: app_b annotations: # 追加!!! alb.ingress.kubernetes.io/healthcheck-path: '/app_b/healthcheck' spec: ports: - port: 80 targetPort: 3000 protocol: TCP type: NodePort selector: app: app_b
これを apply すればそれぞれのターゲットグループのヘルスチェックパスが変わるはずです。
port とか protocol が異なる場合もこんな感じでservice ごとにわけてあげると良さそうですね。
最後に
まだannotationで設定していくのに慣れない