前書き
Kubernetes1.7でhostAliasesが導入された
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v170
今回hostAliasesを検証してみたので検証結果を示す。
なお、GKE上で動作検証を行っている。
hostAliasesとは
pod levelで/etc/hostsを上書き出来る機能。
use-case
- 例えばMySQLはGCEで運用したいという場合でかつドメインでアクセスしたい場合
- インスタンスのIPが192.168.2.4 ドメインがdb.example.jpとした場合、
- 基本的にdbのドメインはDNS登録したくない。hostsで登録したい
- 社内専用システム等ドメインを登録したくないサービスにアクセスしたい場合
- 社内専用の認証システムが 192.168.27 oauth.example.jpの場合
- これもhostsで解決したい
などが考えられる。
設定
今回はkubernetes-guestbookに設定を追加してみる
spec.template.spec.hostAliasesとして追加することになる
frontend-deployment.yamlを一部抜粋
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google-samples/gb-frontend:v4
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 80
hostAliases:
- hostnames:
- mydb1.jp
ip: 192.168.0.3
- hostnames:
- mydb2.jp
ip: 192.168.0.4
hostnamesにドメインとipをセットで書く
確認
今回はpodにexec して /etc/hostsを確認してみる
kubectl get pods
kubectl exec -it frontend-......-.... bash -
# cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.32.0.13 frontend-2019487900-ctsm6
192.168.0.3 mydb1.jp
192.168.0.4 mydb2.jp
とyamlで指定した hostsが追加されていることがわかる。
同一IPで複数hostがある場合
https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
のマニュアルの用に、 1IPに対して複数hostsを並べればいい。