GKEとGCEのIngressではGCPで予約したstatic-ipをNameで指定出来ます。
ちなみに何も指定しないでIngressを作ると毎回IPが変わります。
なぜstatic-ipを振るのか
IngressのIPにドメインを振ってる場合に毎回IPが変わるとかなり辛いため。
手順
- static-ipを予約する
- 予約したstatic-ipを指定してingressを作る
- 予約したstatic-ipがingressに振られているか確認
準備
gcloudのコマンドがどのプロジェクトにセットされているかを確認
gcloud config get-value project
以前、Ingressを作りたいプロジェクトとは違うプロジェクトがセットされていて
Ingressを作り直しても予約したはずstatic-ipが使われずに辛い思いをしました・・・
もし違うプロジェクトがsetされていれば
gcloud config set project {project-name}
1. static-ipを予約する
gcloud コマンドでstatic-ipを予約。
予約するのはIPのタイプはグローバルです。
ちなみにGCPのコンソールからも出来ます。
gcloud compute addresses create test-ip --global
ちゃんとcreateできていれば、listに追加されてます。予約しただけなのでSTATUSはRESERVEDのはずです。
gcloud compute addresses list --global
NAME REGION ADDRESS STATUS
test-ip 35.186.221.137 RESERVED
2. 予約したstatic-ipを指定してingressを作る
kubernetes.io/ingress.global-static-ip-name: "test-ip"
を追加したingress.yamlを指定してcreateする。
kubectl create -f ingress.yaml
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: static-ip
annotations:
kubernetes.io/ingress.global-static-ip-name: "test-ip"
spec:
tls:
# This assumes tls-secret exists.
- secretName: tls-secret
backend:
# This assumes http-svc exists and routes to healthy endpoints.
serviceName: http-svc
servicePort: 80
3. 予約したstatic-ipがingressに振られているか確認
$ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
test-ingress * 35.186.221.137 80, 443 1h
$ gcloud compute addresses list --global
NAME REGION ADDRESS STATUS
test-ip 35.186.221.137 IN_USE
参考
ほとんど、このリンクからの引用です!
https://github.com/kubernetes/ingress/tree/master/examples/static-ip/gce