Google Kubernetes Engineのフロントエンドを
ingress
にする場合、自動でGCPのヘルスチェックが作られ、これを通過しないとPodが正常動作していたとしてもバックエンドサービスが開通しません。
自動作成されるデフォルトのヘルスチェック挙動は、/をHTTP GETして200OKが得られることをチェックしています。バックエンドがこのリクエストに対応できるよう実装できればヘルスチェックを通過します。
これ以外の構成にする場合には、kubernetesではなくGCPの操作により適切な構成にする必要があります。
該当のヘルスチェックは、クラウドコンソールの
Cloud Load Balancing
からたどれます。
バックエンドサービスごとにヘルスチェックがあり、監視対象などの設定を変更できます。
ヘルスチェックのカスタマイズ
BackendConfig CRD
というカスタムリソースを作成すると、GCPのヘルスチェックを制御できます。
参照はServiceのアノテーションです。
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: envoy-beconfig
spec:
healthCheck:
checkIntervalSec: 15
timeoutSec: 15
healthyThreshold: 1
unhealthyThreshold: 2
type: HTTPS
requestPath: /healthz
port: 8443
---
apiVersion: v1
kind: Service
metadata:
name: envoy
labels:
name: envoy
annotations:
cloud.google.com/backend-config: '{"default": "envoy-beconfig"}'
cloud.google.com/app-protocols: '{"https":"HTTPS"}'
spec:
ports:
- name: https
port: 443
targetPort: https
selector:
name: envoy
分かりにくいポイントとして、コンテナネイティブの負荷分散構成の場合spec.headlthCheck.portに指定するポートは、ServiceではなくPodのcontainerPortです。
envoyの例
バックエンドがenvoyの場合、GCPのヘルスチェック設定を変更して200OKを返すリクエストを飛ばす構成にする必要がありそうです。
プロトコルやホスト、パスを変更することで、実際に動作するリクエストを設定できます。
- ヘルスチェックのデフォルトプロトコルはHTTPだが、envoyがHTTPSサービスを提供する構成の場合HTTPに対応しない
- envoyでSNI構成をとった場合、リクエストに適切なホストが必要
/が無条件に200OKを返すサービスとは限らない
特定のPathで200OKを返したい場合、ルーティングのvirtual_hostsに以下のようなルートを追加するとenvoyが直接応答します。
virtual_hosts:
- name: example
domains:
- "*"
routes:
- match:
prefix: "/healthz"
direct_response:
status: "200"
ドメインにワイルドカードを指定しておくと、ホスト指定のないヘルスチェックも対応可能です。
⁋ 2021/12/02↻ 2021/12/02
Google Kubernetes Engineは、Pod/ServiceのIPをVPCのサブネット範囲で動的に設定しています(古いクラスタでVPCネイティブでない場合をのぞく)。
Podと …
envoyの HTTPアップグレード 機能は、WebSocketとHTTP CONNECTメソッドをサポートしています。
CONNECTを使うとTCP通信をトンネルできます。
また、SNIに対応したク …
GKE(Google Kubernetes Engine)は、HTTPS サービスを Kubernetes Gateway/Ingress を用いて公開できます。
非 HTTP のサービスを公開するに …
Google Cloudはネットワーク製品のラインアップが充実していますが、製品ごとに機能と受け付けるオプションが異なるため製品理解が重要です。
まず、製品名が互いに似通っていて区別しづらいため、 …
Google Kubernetes Engineが提供する 垂直Pod自動スケーリング (Vertical Pod Autoscaling)は、Podのコンテナリソース(CPU/RAM)を自動調整する …
kubectlなどkubernetesクラスタとの通信は、クラスタごとのルートCAで署名されており、GKEのルートCAは5年で期限が切れるため手動更新が必要です。
Google Kubernetes …
JWTについては、発行やリフレッシュなどライフサイクル全体を設計する必要がありますが、envoyは主要な機能であるJWTの有効性検証を提供しています。
対応アルゴリズムなどの概要は、 JWT …
envoyは多様なプロトコルに対応しています。TCPプロキシとしても利用でき、HTTPプロキシ機能と混在も可能です。
TCPはHTTPと比べて取り扱う処理が少ないため、設定もシンプルです。以下はSSH …
envoyは非常に高機能なプロキシですが、Basic認証のフィルタ機能はありません。 Set basic authentication to the endpoint で議論されているように、同等の機 …
envoyのconfig は、設定ファイルにスタティックに定義する方法のほか、xDSプロトコルに沿って動的に設定する方法も利用できます。
xDSはgRPCサービスを構成する方法と、configファイ …
envoyは高機能なネットワークプロキシで、サポートするプロトコルが豊富、動的に構成変更が可能といった特長があります。 高機能プロキシ共通の課題としてconfigが複雑であるため、構成を理解することが …
Google Kubernetes Engine(GKE)は、Google Cloud Platform(GCP)上で動作するマネージドKubernetesです。GCPが提供する世界各国リージョンのデ …
Google Cloud Build は、CI/CD をホストするサービスです。
Artifact Registry と統合されており、GKE で動作させる docker イメージをビルドする用途に …
Google Kubernetes Engine(GKE)はKubernetesのマネージドサービスで、マスターノードがホストされています。また、Webの管理コンソールからバージョンを選択するだけでア …
kubernetesのデフォルト挙動では、podが取得するリモートIPがクラスターネットワークのIPになっています。
そのため、httpサーバーのログにも、10.0.0.1などのプライベートIPアクセ …
Google Kubernetes Engine(GKE、2017秋にGoogle Container Engineから改称)はGCE上に構築されたkubernetesのマネージドクラスタです。 …
Google Container Engine(GKE)など、クラウドインフラ上でdockerコンテナを動作させる場合、データ確保のため外部ディスクを利用するケースが多々あります。
GKEでは、設定フ …
Google Kubernetes Engineを用いてWebサービスを公開している場合、DNS設定する外部IPを同一のアドレスに固定する必要があります。
kubernetesのデフォルト挙動では、外 …
EN contents
Google Kubernetes Engine (GKE) can expose HTTPS services using Kubernetes Gateway/Ingress.
To expose …