devopsに入門した肉体派エンジニアです(・∀・)
今はGKEのingressを使っていろいろやってみようということで勉強中です!
今回はここまでわかったことをまとめていこうと思います
ingressってなんぞ?
ざっくりL7ロードバランサーって理解でOKかなと。
k8sではインターネットとサービスの間に置かれてアクセスを捌いてくれます
internet
|
[ Ingress ]
------|-----------|--
[ Service ] [ Service ]
| | | |
[Pod] [Pod] [Pod] [Pod]
早速書いてみよう!
apiVersion: extensions/v1beta1
kind: Ingress # Ingressであるとわかるようにする
metadata:
name: ingress-experimental
# annotations:
# kubernetes.io/ingress.global-static-ip-name: 詳しくはここを参照のこと [https://github.com/kubernetes/ingress-gce/tree/master/examples/static-ip](https://github.com/kubernetes/ingress-gce/tree/master/examples/static-ip)
spec:
rules:
- http:
paths:
- path: /* # ここにルールを追加する。下にいくつも追加できるが上限は50らしい
backend:
serviceName: nginx # ここにサービス名
servicePort: 80 # ここはtargetPort
この記述だとNginxというmetadata.nameのサービスに転送してくれる。
転送のルールは /*
としたのでとりあえずIPアドレスにアクセスしてきたらNginx側のルートにどんどん転送される。階層構造にも正しく転送されるので IP_ADDRESS/path/to/file
でもきちんと表示される。
よくありそうな設定パターン
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-experimental
spec:
rules:
- http:
paths:
- path: /v-1/* # ここにルールを追加する。下にいくつも追加できるが上限は50らしい
backend:
serviceName: nginx-v1
servicePort: 80 # ここはtargetPort
- path: /v-2/* # ここにルールを追加する。下にいくつも追加できるが上限は50らしい
backend:
serviceName: nginx-v2
servicePort: 80 # ここはtargetPort
この場合は IP_ADDRES/v1/
と IP_ADDRES/v2/
以下に転送される。
このとき気をつけないといけないのは転送先のPodでも Pod/v1/
以下に転送されること。これはNginxなんかだとrewriteなどで適切なパスに飛べるようにして上げる必要がある。
私はここでかなりハマった(´・ω・`)
参考にしたやつ
kubernetes.io
https://qiita.com/ryodocx/items/008fdaf5c68678656749