【Kubernetesリソースシリーズ第八弾】Ingressについて知る!
どもです。サンローランはハイブランドおじさんの巣窟だと勝手に僻んでいるsaisaiです。
今回はkubernetesリソースの一つであるIngressについて学習したことを記事にしたいと思います。
クラスター内への通信などに欠かせないリソースですので、こちらもしっかり抑えたいと思います。
※本ブログこちらの記事を参考にminikubeの環境構築を行った方はnoneドライバがingress controllerをサポートしていない関係上、以下の操作を行った上で検証を行っていただきますようお願いいたします。
$ minikube stop
$ minikube delete
$ usermod -aG docker ec2-user && newgrp docker
$ minikube start --driver=docker
$ minikube addons enable ingress
それでは早速挑戦してみましょう!
Ingressとは
Ingressとはコンテナを外部公開したり、L7ロードバランサーとしてURLによるサービス切り替えを実現したりすることができるリソースです。kubernetesで構築したサービスの公開に欠かせないリソースですね!
ではマニフェストファイルの一例をみてみたいと思います。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false" #SSLリダイレクトは今回は無効化
spec:
rules:
- http:
paths:
- path: / #パスの指定(今回はルート)
pathType: Prefix
backend: #以下パスに応じた転送先の指定
service:
name: web-service
port: #ポートの指定
number: 80
上記のように外部から接続する際の情報を管理しているのがIngressといえそうです。
実際に接続してみる
それでは実際にPodを作成し、Ingressを紐づけて外部からアクセスしてみましょう。
今回はPodの作成リソースとしてDeploymentとServiceを使用します。
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
env: test
ports:
- port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: web
env: test
template:
metadata:
name: nginx
labels:
app: web
env: test
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
それではリソース達を作成します。
$ kubectl apply -f ingress.yml
service/web-svc created
deployment.apps/nginx created
作成されたリソースを確認してみましょう。
$ kubectl get ing,svc,deploy
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/test <none> * 192.168.49.2 80 8m25s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
service/web-svc ClusterIP 10.99.148.8 <none> 80/TCP 8m25s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 2/2 2 2 8m25s
Ingressによってサービス接続用IPアドレス(外部アドレス)がふられています!早速接続確認してみましょう!
$ curl 192.168.49.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
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>
IPアドレスを使用して無事Nginxに接続できることが確認できました!
ひとこと
今回はIngressについて学習したことを記事にしてみました!
本来はブラウザからNginxの起動を確認したかったのですが、AWSを使用している以上ローカルIPでブラウザ接続する方法が分からず断念しました…。同じサブネットにWindowsインスタンスを立ち上げて接続したりすれば確認できたのだろうか…。
まぁ本番運用する際はEC2にminikubeを入れてkubernetesを運用するということはまずないと思うので今回はあくまで検証ということで多めにみていただければありがたいです!
ここまで読んでいただきありがとうございました!
-saisai-
↓オススメ教材