gcloud builds submit --tag asia-northeast2-docker.pkg.dev/bangboo-prj/xxx/image001
helloworld@bangboo-prj.iam.gserviceaccount.com 作成
アクセス元縺?IPを確鐔??するCloud run作成
ドメインないと無理なの縺?LB縺?IAPをあきらめ生成されるURLで十分
Cloud runでアクセス元IPを表示するヤツ
run縺?allUsers縺?invokerを削除したらアクセス臀??可になった(この方觸??で管理する)
curl http://ifconfig.me/ で十分だったが
GKE
k8sの内驛?NWは通常別途いるがGKEは速い奴が動作
GKEはクラスタ内部縺?DNSでサービス名で名前解決できる
サービス縺?IPとポートは環藹??変数で藹??照藹??
kubectlを使うには、gcloud container cluters get-credentials を打つ藹??要がある
GKE設藹??
-クラス繧?:側の設定(IP範囲とかセキュリティとか?)
一闊?/限定公開:外驛?IPを使うか使繧?ないか
コントロー繝? プレーン承鐔??済みネットワーク・??CPにアクセスできるセキュリティ軆??蝗?
-ワークロード:マニフェストで設定
一般か限定公開か?コントロールプレーンが外驛?IPか?CPがグローバルアクセス可か?承鐔??NWか?
一般公開で承鐔??NWが良いのでは・??簡単だし、
限定公開で使うには・??CPに藹??驛?IPで承鐔??NWでいいのでは・??
NW:default subnet:default
外驛?IPでアクセス許藹??
CP アドレスの軆??蝗? 192.168.1.0/28とか172.16.0.0/28(サブネット重複しない螂?)
コントロー繝? プレーン承鐔??済みネットワー繧? home (169.99.99.0/24ではな縺?GCP縺?IPぽい)
限定公開ならnatが要る
CP縺? VPC縺?IP範囲は、クラスタ縺? VPC 内のサブネットと重複不可。CPとクラスタ縺? VPC ピアリングを使用してプライベートで通信します
グローバルアクセスは別リージョンからという諢?味っぽい、cloud shellから縺?kubectlのためONが良い
デフォルト設藹??なら作成したサブネット縺?IP範囲でな縺?クラスタが作られない
面倒ならdefault-defaultで良いかも
サブネットをVPCネットワークを考えて指定する方が偉いかも知れんが
default asia-northeast2 10.174.0.0/20 の場合
サブネットは asia-northeast2 10.174.27.0/24 とか
ARにあるコンテナからGKEをデプロイが簡単にできる
Cloud Source Repositories でソース管理gitが下記のようにできる
gcloud source repos clone bangboo-registry --project=bangboo-prj
cd bangboo-registry
git push -u origin master
run使用中のコンテナがGKE上では臀??手縺?いかない runのコンテナ縺?8080のようだ
Dockerfile縺?main.py上ではポートは臀??でもよい仕様だが、runで自動的縺?8080割り当てるようだ
それが駄目でありGKEは環藹??変数縺?PORT 8080を指定
CrashLoopBackOff問題がでる
https://www.scsk.jp/sp/sysdig/blog/container_security/content_7.html
デプロイ公開でポート80 ターゲットポート8080に・??クラスタを作成後、ワークロードでデプロイする)
development縺?spec: containers: ports: - containerPort: 8080 を入れる?
yamlでな縺?、コンソールで設定時に入れると良い
$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/flask-1-service LoadBalancer 10.48.4.134 34.97.169.72 80:32147/TCP 20m
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
これは簡単に臀??手く行縺?、環藹??変謨?PORT8080不要
ワークロード縺?yaml縺? spec: replicas: 0を保存するとアクセスを止められる
コンフィグマップ:構成ファイル、コマンドライン藹??数、環藹??変数、ポート番号を別途持ってい縺?Podにバインドする(マニフェストに書縺?と抜き出され見れる)
シークレット:Base64の値・??(マニフェストに書縺?と抜き出され見れる)甘いの縺?secret mgrを使う方が良い?
config map/secretはマニフェストで編集する必要がある(見れるだけと思繧?れる)
エディタで鐔??てみる:yamlとかステータスが見れる
■LBに静的IPを振る
hello-app-addressと名付けたIPを藹??得
LBのア繝?テーションで設定
# ingress.yaml(NW縺?NodePort、Route
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
namespace: default
annotations:
kubernetes.io/ingress.global-static-ip-name: hello-app-address # IP
networking.gke.io/managed-certificates: hello-managed-cert # 証譏?譖?
kubernetes.io/ingress.class: "gce" # 外驛? HTTP(S)LB
spec:
defaultBackend:
service:
name: hello-deployment
port:
number: 8080
Service縺?LBはリージョン指定するタイプの静的IP
Ingressはグローバ繝?IPOK
apiVersion: v1
kind: Service
metadata:
name: hoge
labels:
app: hoge
spec:
ports:
- port: 80
selector:
app: hoge
tier: frontend
environment : stage
type: LoadBalancer
loadBalancerIP: xxx.xxx.xxx.xxx
Armor縺?IP制限
1)サービスから対象を選択しingressを作成すること縺?LBを追加しArmorも設藹??可閭?
2)デフォルトLBに臀??けるに縺?kubectl要りそう、backendconfig.yamlはどこに置縺?
サービス画面縺?kubectrlから
# backend-config.yaml を作り kubectl apply -f backend-config.yaml
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
namespace: default
name: hello-backend-config
spec:
securityPolicy:
name: "bangboo-armor"
service縺?yamlに臀??記を追加
metadata:
annotations:
cloud.google.com/backend-config: '{"ports": {"8080":"hello-backend-config"}}'
↑これでは臀??足する
どこで設定状態を見るか?
ingress作成し縺?LB縺?Armorつけて、デフォルトLBを削除してみる?
GKEの藹??部からのアクセスを制限するには・??
限定公開+コントロールプレーンは承鐔??済み軆??でアクセスしKubectlする
Cloud shellのグローバ繝?IPを藹??得しシェルを承鐔??済縺?NWにできないか?>OK
curl http://ifconfig.me/
GKE縺?PythonをCron定期実行させたい
Argo縺?DAGを実行させたい
https://zenn.dev/ring_belle/articles/2c4bbe4365b544
Argo縺?GKE縺?CICD(Argoは別ホスト縺?Githubにアクセスし、GKEを操る)
https://www.asobou.co.jp/blog/web/argo-cd
サービスアカウント
Workload Identity Federation for GKEの新しい設藹??方觸??を解説 - G-gen Tech Blog1)繝?ードに軆??付いたサービスアカウントKSAをそのまま使用する(陬?縺?impersonate)
gkeのサービスアカウント縺?IAMサービスアカウントの軆??づけが不要になった
VPCサービスコントロールで管理したい場合impersonate縺?SAを指定できないためWIFが要る
2)サービスアカウントのキーを Kubernetes Secret とし縺? GKE クラスタに登録する
3)Workload Identity Federationをつかう
窶?KSAは繝?ード単位で設定、Pod単位縺?GCPのリソースにアクセスできるように管理したい?
笳?メ繝?
忙しいときはスケールアウトするが、落ち着き始めるとスケー繝?inし、必要縺?Podも落とされてしまう
safe-to-evict をyml縺?annotationで譏?示して特藹??Podはスケー繝?inしない等にしてお縺?
annotations:
cluster-autoscaler.kubernetes.io/safe-to-evict:"false"
クラスタのオートスケーラ繝? イベントの表遉? | Google Kubernetes Engine (GKE) | Google Cloud↓
最蟆?Pod数をスケー繝?inした値で固藹??する等も
■Workloads リソー繧?
Pod:Workloadsリソースの最蟆?単位
ReplicaSet:Podのレプリカを作成し、指定した数縺?Podを維持し続けるリソースです。
Deployment:ローリングアップデートやロールバックなどを実現するリソースです。
DaemonSet(ReplicaSet亜遞?):各繝?ード縺?Podを一つずつ配置するリソースです。
StatefulSet(ReplicaSet亜遞?):ステートフル縺?Podを作成できるリソースです。
Job:Podを利用して、指定回数のみ処理を実行させるリソースです。(使い捨縺?Pod)
CronJob:Jobを管理するリソースです。
Config connector:GKE縺?GCPリソースを調軆??して縺?れるアドオン。Podの藹??加減少にあたり必要なアカウントや権限やPubSub等々を自動作成や管理する。マニフェスト縺?yml縺?cnrm縺?APIを記載したりする(Config connector resource nameの略・??
■GKE関連の運逕?
GKEクラスタ鐔??証ローテーショ繝?
30日以内になると自動ローテーションするが危険なので手動が逕?
GKEはマイクロサービスのエンドポイントでのサービス觸??供かgcloud api利用が前觸??といえるのでこれ縺?OK
1) ローテ開始 (CP縺?IPとクレデンシャ繝?)
2) 繝?ード再作成
3) APIクライアントを更譁? (クレデンシャル再藹??得)
4) ローテ完了 (元IPと旧クレデンシャルの停豁?)
GKEクラスタ鐔??証ローテーションの考諷?
セキュア縺?GKEクラス繧?
コントロールプレーンの自動アップグレード&IPローテーション・??繝?ードブールの自動アップグレードで死縺?
CPの更新藹??はクレデンを藹??得しなおす必要がある、Argo縺?CICDを組んでいるとクラスタに鐔??証入りなおす必要がある
繝?ードが入れ替繧?りに時間が觸??かり、時間差で問題がでることがあるので注諢?