初めに

外部環境にWebサーバを配置する関係でIngressを実装することになりました.IngressはKubernetesクラスター内のServiceに対するHTTPのアクセスを管理するためにあります.簡単にいうと特定のPortでしかアクセスできないロードバランサだと思ってください.IngressはWebサーバのServiceをclusterIPにしてIngressを使うようにすればセキュリティーを強くできます.外部にWebサーバを公開する場合,攻撃を受ける可能性があるためIngressはとても有効だと思います.

Ingressの利点

Ingressの利点として以下の2つが挙げられます. - セキュリティの強化 - ここは河竹さんが書く

実装の概要図

実装の概要図は以下に示します. スクリーンショット 2023-11-21 17.53.08.png (83.0 kB)

Kubernetes Clusterはrke2で実装します. この記事に従うと組み立てられます.

クラスタに配置するものは以下です. - Ingress - Nginx Service (Cluster IP) - Nginx Pod

実装

rke2で組み立てたKubernetesクラスタ内に実装するもののYAMLファイルをそれぞれ示します.

Step1: testという名前のNameSpaceを作成

$ kubectl create namespace test
Step2 NginXの構築を行います.

作業ディレクトリの作成

$ mkdir nginx

デプロイメントの作成

$ vi nginx/nginx-deployment.yaml
Nginxのデプロイメントが以下です.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    component: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      component: nginx
  template:
    metadata:
      labels:
        component: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
移動
$ cd nginx

testのNameSpaceに作成

$ kubectl apply -f nginx-deployment.yaml -n test

次はServiceの作成です.Cluster IPで公開するNginxのServiceは以下です.

$ vi nginx/nginx-service.yaml
ファイルサービスの名前はmy-first-serviceとします.
apiVersion: v1
kind: Service
metadata:
  name: my-first-service
spec:
  selector:
    component: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

移動

$ cd nginx

Serviceの作成

$ kubectl apply -f nginx-service.yaml -n test
Step3 作業ディレクトリの作成
$ mkdir ingress
移動
$ cd ingress

ファイルの作成

$ vi ingress.yaml
metadate/namespaceはNginxを作成したtestに作成します. service/nameは先ほど作成したmy-first-serviceというservice名にします. Ingressの設定は以下になります.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-first-service
            port:
              number: 80

Nginxを作成したNameSpaceにIngressを作成します.

$ kubectl apply -f ingress.yaml -n test

Ingressができているか確認します. ADDRESSに192.168.150.1と192.168.150.2と192.168.150.3のIPアドレスが振られているためできています.

$ kubectl get ingress -n test
NAME               CLASS   HOSTS   ADDRESS                                         PORTS   AGE
test-ingress   nginx   *       192.168.150.1,192.168.150.2,192.168.150.3   80      8h

Step4 アクセスができるかどうかを確認します. ブラウザでhttp://IPアドレス:80 と入力しましょう!以下の画面が出ればOKです!

スクリーンショット 2023-11-21 18.33.53.png (30.7 kB)

最後に

参考

https://kubernetes.io/ja/docs/concepts/services-networking/ingress/