GKE(kubernetes)を使って、https(SSL)対応した独自ドメインのサイトを公開する方法
内容
GKEで独自ドメインのhttps対応したサイトを公開します。
GKEの作成
今回はmanaged certificateを利用して、GKEを公開するフローを紹介します。
GKEに使用する固定IPを取得します。
main.tf
resource "google_compute_global_address" "static_ip" {
name = "test-static-ip"
project = "<project name>"
}
$ terraform apply
取得したIPアドレスをAレコードとして、ドメインに付与します。
独自ドメインとして公開したいドメインに、上記で取得したIPアドレスをAレコードとして登録してください。
GKEクラスターの作成
$ gcloud container clusters create-auto demo-cluster --region=us-west1
Credentialsの取得
Clusterにアクセスするためのcredentialsも取得します。
$ gcloud container clusters get-credentials demo-cluster --region us-west1
これで、kubectlコマンドでresourceを作成できるようになりました。
IngressとServiceを作成する
Serviceを作成します(今回はテストなので、Nginx Containerをサービスとして立てます)。
そして、そのサービスを独自ドメインにアクセスしたら表示できるようにIngressを設定していきます。
Nginxサービスの作成
nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: test-app
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
type: ClusterIP
selector:
name: test-app
---
apiVersion: v1
kind: Pod
metadata:
labels:
name: test-app
name: test-app
spec:
containers:
- image: nginx
name: test-app
ports:
- containerPort: 80
上記のように、nginxサービスとPodを作成し、KubernetesにApplyします。
$ kubectl apply -f nginx.yaml
正常に作成できたことを確認します。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-app ClusterIP 10.13.128.170 <none> 80/TCP 3m14s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
test-app 1/1 Running 0 3m21s
Ingrssの作成
次に、先ほど作成したnginxをBackendとするIngressリソースを作成します。
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
# 先ほど作成した固定IPアドレスを指定
kubernetes.io/ingress.regional-static-ip-name: "test-static-ip"
# gceを指定することで、Google Load Balancerを作成する
kubernetes.io/ingress.class: "gce"
# managed cert を指定する
networking.gke.io/managed-certificates: test-cert
kubernetes.io/ingress.allow-http: "true"
spec:
defaultBackend:
service:
name: test-app
port:
number: 80
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: test-cert
spec:
domains:
- <ドメイン名>.com
- www.<ドメイン名>.com
※SSL証明書を作成するため、同時にManagedCertificateリソースも作成しています。
※Aレコードで設定したIPアドレスが正常に取得できるまでSSL証明書の取得ができないため、applyから実際に独自ドメイン名でアクセスできるようになるまで、時間がかかります。
$ kubectl apply -f ingress.yaml
正常にingressが作成されていることを確認します。
$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress <none> * 34.160.49.33 80 7m15s
これで、GKEのIngressリソースからnginxが動作するPodまでトラフィックが到達するようにアプリケーションを作成できました!
最後に、独自ドメインでhttpsアクセスができることを確認します。
$ curl https://<ドメイン名>
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
以上で、完成です。これで、httpsアクセスが可能なGKEクラスターを作成することができました。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion