/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31


January 2024 List
GKE on Jan 14, 2024 9:59 PM

January 14, 2024

GKE
モダンか何か知らんが、豚軆??かイカ軆??で十分じゃ

===========
kubectlチートシート | Kubernetes
【K8sセキュリティ】 “とりあえず動縺?”から堅牢な本番環藹??へ移行!10のチェックリスト

フォルダ縺? .py 縺? requirements.txt 縺? .dockerignore 縺? Dockerfile を入れてアップロードしている
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不要
 クイックスタート: アプリを GKE クラスタにデプロイする  |  Google Kubernetes Engine (GKE)  |  Google Cloud

ワークロード縺?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はどこに置縺?
 Cloud Armor縺?GKE IngressへのアクセスをIPで制御する #GoogleCloud - Qiita
サービス画面縺?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する
 Armor縺?IP制限+アダプティブ設藹??(Armor縺?LBが要る)
GKE縺?NodePort Type縺?Serviceに対してインターネットアクセス許可する - IK.AM

限定公開クラスタ・??雕?み台サーバ縺?IAPで入りKubectl(承鐔??済縺?NWでの制御縺?IPのみなので危ういらしい)
GKE(Google Kubernetes Engine) Autopilotの限定公開クラスタ縺?IAPを利用してアクセスする | Tech-Tech (nddhq.co.jp)
【GKE/Terraform】外部ネットワークからの全てのアクセスを制限した限定公開クラスタを作成し、雕?み台サーバーからkubectlする (zenn.dev)
コントロールプレーン縺?Pod間で自動FWされない場合もありFirewall要チェッ繧?

 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 Blog
1)繝?ードに軆??付いたサービスアカウントKSAをそのまま使用する(陬?縺?impersonate)
gkeのサービスアカウント縺?IAMサービスアカウントの軆??づけが不要になった
VPCサービスコントロールで管理したい場合impersonate縺?SAを指定できないためWIFが要る
2)サービスアカウントのキーを Kubernetes Secret とし縺? GKE クラスタに登録する
3)Workload Identity Federationをつかう
GCP 縺? Workload Identity サービスについてのまとめ #GoogleCloud - Qiita
Githubとか外部のサービスから利用するためSAを連携させる
IAM>Workload identity連携画面で設定が見れる
窶?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を組んでいるとクラスタに鐔??証入りなおす必要がある
 繝?ードが入れ替繧?りに時間が觸??かり、時間差で問題がでることがあるので注諢?

Posted by funa : 09:59 PM | Web | Comment (0) | Trackback (0)