要旨
- 公式ドキュメントを進めていくと、 Backend services が2個出来てしまい、意図していないデフォルトの設定が残ってしまいます
- デフォルトの設定が出ないようにマニュフェストを修正し、動作確認までします
- Google の公式ドキュメント
実行方法
- 以下の作業は GitHub に纏めてあります
準備
- gcloud コマンドによる認証を行います
gcloud auth login
- GKE を起動するプロジェクトを設定します
- ${YOUR_PROJECT} はご自分のプロジェクトを入れて下さい
gcloud config set project ${YOUR_PROJECT}
- GKE の Zone を予め設定
asia-northeast1-a
を指定してますが、他の Zone でも問題無いです
gcloud config set compute/zone asia-northeast1-a
Kubernetes Engine クラスタの作成
- Cluster の名前を先に決めておきます
export cl_name='ingress-test' echo ${cl_name}
- GKE を構築します
- テストのため、 Node は2台で起動する
gcloud beta container clusters create ${cl_name} --num-nodes=2
- クラスタの認証情報を取得します
gcloud beta container clusters get-credentials ${cl_name}
- Node の確認
kubectl get node -o wide
Deployment を作成する
- マニュフェスト作成します
vim my-bsc-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: my-bsc-deployment spec: selector: matchLabels: purpose: bsc-config-demo replicas: 2 template: metadata: labels: purpose: bsc-config-demo spec: containers: - name: hello-app-container image: gcr.io/google-samples/hello-app:1.0
- 実行します
kubectl apply -f my-bsc-deployment.yaml
- 確認します
kubectl get deployment
### 例 $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE my-bsc-deployment 2/2 2 2 55s
BackendConfig を作る
- マニュフェスト作成します
vim my-bsc-backendconfig.yaml
apiVersion: cloud.google.com/v1beta1 kind: BackendConfig metadata: name: my-bsc-backendconfig spec: timeoutSec: 40 connectionDraining: drainingTimeoutSec: 60
- 実行します
kubectl apply -f my-bsc-backendconfig.yaml
- 確認します
kubectl get backendconfig
### 例 $ kubectl get backendconfig NAME AGE my-bsc-backendconfig 31s
Service の作成
- マニュフェスト作成します
apiVersion: v1 kind: Service metadata: name: my-bsc-service labels: purpose: bsc-config-demo annotations: beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}' spec: type: NodePort selector: purpose: bsc-config-demo ports: - port: 80 protocol: TCP targetPort: 8080
- 実行します
kubectl apply -f my-bsc-service.yaml
- 確認します
kubectl get service
### 例 $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.39.240.1 <none> 443/TCP 107m my-bsc-service NodePort 10.39.251.4 <none> 80:32093/TCP 8s
Ingress の作成
- マニュフェスト作成します
vim my-bsc-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-bsc-ingress spec: backend: serviceName: my-bsc-service servicePort: 80
- 実行します
kubectl apply -f my-bsc-ingress.yaml
- 確認します
kubectl get ingress
### 例 $ kubectl get ingress NAME HOSTS ADDRESS PORTS AGE my-bsc-ingress * 80 4s
ブラウザで確認します
- GCP
- Kubernetes Engine
と確認が出来れば、成功です
- 実際にブラウザで確認します
考察したこと
- 参考 URL より、考察したこと
- Ingress の設定の中でバックエンドを明示的に設定しない場合、シングルのデフォルトバックエンドが設定される
- ここで設定に不備があると、自分が設定したバックエンドとは別に、デフォルトのバックエンドが作成される
- Ingress / Default Backend
- Ingress / Single Service Ingerss
リソースの 削除
- 以下のコマンドを実施します
kubectl delete ingress my-bsc-ingress kubectl delete service my-bsc-service kubectl delete backendconfig my-bsc-backendconfig kubectl delete deployment my-bsc-deployment
Kubernetes Engine クラスタの削除
- 以下のコマンドを実施します
gcloud beta container clusters delete ${cl_name}