kawabatas技術ブログ

試してみたことを書いていきます

GKE で NGINX Ingress Controller を使ってみる

NGINX Ingress Controller とは

多くのWebサーバーの設定ファイルは似ているので、必要な部分だけカスタムして簡単に構築しようというもの。

https://github.com/kubernetes/ingress-nginx

今回は GKE で NGINX Ingress Controller を使い、リダイレクトサーバーを準備してみる。

GKE + NGINX Ingress Controllerアーキテクチャはこちら。

f:id:kawabatas:20180730173812p:plain

手順

0.Static IP 作成、Cloud DNS の設定

Region Static IP を作成する。Global IP では動作しない

$ gcloud compute addresses create [IP名] --region=[リージョン名]

Cloud DNS に Aレコードを追加する

1.Helm で NGINX Ingress Controller を作成

$ helm install --name [名前] stable/nginx-ingress --namespace [ネームスペース名] \
--set rbac.create=true \
--set controller.service.loadBalancerIP=[作成したStatic IP]

2.SSL の証明書を作成

cert-manager で SSL の証明書の更新を管理しようと思う。

cert-manager のインストールについてはまた別でまとめたい。

とりあえず参考URLのみ

https://github.com/ahmetb/gke-letsencrypt

https://qiita.com/apstndb/items/3a39a1e6acacbbc30765

Certificate 作成

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: xxxxx-tls
  namespace: xxxxx
spec:
  secretName: xxxxx-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  commonName: [ドメイン名]
  dnsNames:
  - [ドメイン名]
  acme:
    config:
    - dns01:
        provider: prod-dns
      domains:
      - [ドメイン名]

3.NGINX Ingress Controller で使用する Ingress Resource を作成

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: xxxxx
  name: redirect-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/permanent-redirect: "https://google.com" #一旦、グーグルへリダイレクトさせておく
    kubernetes.io/ingress.allow-http: "false"
spec:
  rules:
  - host: [ドメイン名]
    http:
      paths:
      - backend:
          serviceName: temp-svc # 存在しないものであるが、backend を指定しないとリダイレクトされなかった 
          servicePort: 8080
  tls:
  - hosts:
    - [ドメイン名]
    secretName: xxxxx-tls