LoginSignup
0
2

More than 5 years have passed since last update.

GKEでIngressで登録しているHTTP LoadBalancerのCloud CDNをCLIでInvalidationする

Posted at

そもそもの前提として、現状Ingressの設定だけでバックエンドサービスのCloudCDNを有効にすることは出来ないっぽいです(対応予定はあると思うのですが https://github.com/kubernetes/contrib/issues/1680) 。なので作成後直接手で有効にしてます… :joy:

CI上で動かそうと思って調べたけど、結局必要無さそうなのでメモとして。

値の取得と実行

Cloud CDNのキャッシュをinvalidationするには、バックエンド サービスにリクエストをルーティングするURL Mapの名前が必要になります。詳しくは公式を見てもらえればと思いますが、Ingressで構築している場合は k8s-xx-xxxx--adsfsewfwefewfwefみたいな名前が自動的に振られています。

kubectl get ingress $ingress -o go-template='{{ index .metadata.annotations "ingress.kubernetes.io/url-map" }}'

Ingressの情報を取得するにはkubectlを使うのが手っ取り早いです。metadata.annotationsにurl-mapの情報が入っているのでそれを取得しましょう。

Cloud CDNのinvalidationはgcloudから実行できます。

gcloud compute url-maps invalidate-cdn-cache $urlmap --path "$target_path"

引数処理などは簡略化してます。

#!/bin/sh

project=$1
cluster=$2
zone=$3
ingress=$4
target_path=$5

gcloud --project=$project container clusters get-credentials $cluster --zone $zone 
urlmap=$(kubectl get ingress $ingress -o go-template='{{ index .metadata.annotations "ingress.kubernetes.io/url-map" }}')

gcloud compute url-maps invalidate-cdn-cache $urlmap --path "$target_path"

おわり

本来はGCSで完結できれば上記のような事は不要なんですが、GCSではHTTPS・カスタムドメインが使用できない + HTTP LoadBalancerのバックエンドサービスをGCSバケットに指定するのはまだAlphaなので、本番ではちょっと使えなかったんですよね :innocent: その内来ると思うので、その場合には出来る限りGCSを使いましょう。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2