nginx + php-fpm + cloudsql proxy のコンテナで構成されたPod、External Load BalancerのServiceを構築したときのメモになります。
Kubernets Enginesを作成します。Preemptible VM Nodeで作成しています。
gcloud container clusters create test-cluster --machine-type=g1-small --network=product-network --subnetwork=prod-asia --preemptible
CloudSQLへの接続ユーザ情報からsecretを作成しておきます。
kubectl create secret generic cloudsql-db-credentials --from-literal=username=proxyuser --from-literal=password=xxxxx
CloudSQL Admin、CloudSQL Client、CloudSQL Editorの権限を持つIAMを作成、credentials.jsonを取得します
kubectl create secret generic cloudsql-instance-credentials --from-file=credentials.json=credentials.json
各構成しているnginx、php-fpmは下記を参考に作成しました。
GCRにイメージをpushする前にGCRと認証済みにしておき必要があります。以下コマンドを実行しておきます。
gcloud auth configure-docker
docker pushするには、下記も必要になります。
docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://asia.gcr.io
Pod構成ファイルの作成
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: mysql-client labels: app: mysql-client spec: template: metadata: labels: app: mysql-client spec: containers: - name: web image: asia.gcr.io/[project-id]/nginx:latest ports: - containerPort: 8080 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1:3306 # These secrets are required to start the pod. # [START cloudsql_secrets] - name: WORDPRESS_DB_USER valueFrom: secretKeyRef: name: cloudsql-db-credentials key: username - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: cloudsql-db-credentials key: password # [END cloudsql_secrets] - name: php-fpm image: asia.gcr.io/[project-id]/php-fpm:latest ports: - containerPort: 9000 # Change <INSTANCE_CONNECTION_NAME> here to include your GCP # project, the region of your Cloud SQL instance and the name # of your Cloud SQL instance. The format is # $PROJECT:$REGION:$INSTANCE # [START proxy_container] - name: cloudsql-proxy image: gcr.io/cloudsql-docker/gce-proxy:1.11 command: ["/cloud_sql_proxy", "-instances=[project-id]:asia-east1:web2-db=tcp:3306", "-credential_file=/secrets/cloudsql/credentials.json"] volumeMounts: - name: cloudsql-instance-credentials mountPath: /secrets/cloudsql readOnly: true # [END proxy_container] # [START volumes] volumes: - name: cloudsql-instance-credentials secret: secretName: cloudsql-instance-credentials # [END volumes]
Service用構成ファイルの作成
apiVersion: v1 kind: Service metadata: name: web spec: ports: - port: 80 targetPort: 8080 selector: app: mysql-client type: LoadBalancer
Podから作成しておきます。
kubectl create -f deployment.yaml
kubectl create -f service-web.yaml
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ にも記載されている通り、SSL termination する場合は、Ingress resourceが必要になります。