GNU/Linux >> Linux の 問題 >  >> Linux

Ingress Controllerとは何ですか?Helmを使用してAWSのKubernetesClusterにNginxIngressControllerをデプロイする方法

Nginx Ingress Controllerのインストールを進める前に、IngressとIngressControllerが何であるかを簡単に見てみましょう。この記事の焦点はセットアップにあり、KubernetesクラスターでNginxIngressControllerをセットアップするためのすべての前提条件に精通していることを前提としています。

Kubernetes Ingress

これは、Kubernetesクラスター内のサービスへの外部アクセスを管理するKubernetesオブジェクトです。 Kubernetesクラスタの外部からKubernetesクラスタ内のサービスへのHTTPおよびHTTPSルートを公開します。

入力コントローラー

Ingressを使用するには、KubernetesクラスターにIngressコントローラーが必要です。クラスタ内の他のコントローラのようにKubernetesクラスタの一部として提供されるのではなく、クラスタ内で自動的に起動しません。 Kubernetesクラスターには任意の数のIngressコントローラーをデプロイできます。そのためには、各入力に適切なingress.classの注釈を付ける必要があります。利用可能なIngressコントローラーにはさまざまな種類があります。 Ingress Controllerは、Kubernetes環境向けのLoadBalancerです。 Kubernetes環境のトラフィック管理ソリューションとして使用されます。

この記事では、Kopsを使用してセットアップされたKubernetesクラスターにHelmを使用してNginxIngressControllerをインストールする方法について説明します。 Nginx Ingress Controllerの詳細については、こちらの公式ドキュメントをご覧ください。

前提条件
  1. AWSアカウント(アカウントがない場合は作成します)。
  2. マシンにインストールされているKops1.18.2(Kopsを使用してKubernetesクラスタを作成する方法と詳細については、ここをクリックしてください)。
  3. Helm v3.5.3(Ubuntu ServerにHelmをインストールする方法については、ここをクリックしてください)
  4. S3バケット(AWSでS3バケットを作成する方法については、ここをクリックしてください)。
  5. ドメイン名(AWSにドメインを登録する方法については、ここをクリックしてください)。
  6. 管理者権限を持つIAMロール(AWSでIAMロールを作成する方法については、ここをクリックしてください)。

何をしますか?

  1. Kopsを使用してKubernetesクラスターを作成する
  2. Helmを使用してNginxIngressControllerをセットアップする
  3. NginxIngressControllerによって作成されたLoadBalancerを指すレコードセットをRoute53に作成します
  4. サンプルアプリケーションのオブジェクト定義ファイルを作成する
  5. サンプルアプリケーションをデプロイする
  6. 入力オブジェクトをデプロイする

Kopsを使用してKubernetesクラスターを作成する

クラスタの作成に進む前に、次のコマンドを使用してAWSIAMユーザーアクセスとシークレットキーをエクスポートします。

export AWS_ACCESS_KEY_ID=<your-aws-access-key-here> #Export AWS Access Key
export AWS_SECRET_ACCESS_KEY=<your-aws-secret-key-here> ##Export AWS Secret Key export
Now, export the KOPS_STATE_STORE variable with value as S3 bucket name on your terminal.
KOPS_STATE_STORE=s3://<s3-bucket-name>

Kopsを使用して初めてクラスターを作成し、クラスター構成を保存するために上記で指定したS3バケットを使用する場合、次のコマンドを使用してクラスターを取得しようとしても、クラスターは表示されません。

kops get clusters

Kopsの詳細を理解するには、前提条件で指定されているドキュメントにアクセスしてください。ここで、Kubernetesクラスターを作成するには、値を置き換えて次のコマンドを実行します。ここでは詳しく説明しません。

kops create cluster --name <subdomain.domain.com> --state s3://<s3-bucket> --cloud aws --master-size t2.small --master-count 1 --master-zones us-east-1a --node-size t2.small --node-count 2 --zones us-east-1a,us-east-1b,us-east-1c

提案にはいくつかのコマンドが表示されます。

今回、クラスター構成を取得しようとすると、クラウドとゾーンとともにクラスター名が出力に表示されます。

この時点まで、クラスターは作成されていません。次のコマンドを実行して、クラスター構成を更新してください。

kops update cluster --name kops.devopslee.com

クラスタリソースを作成するには、オプションとして--yesを指定して上記のコマンドを実行する必要があります。

kops update cluster --name kops.devopslee.com --yes

クラスターの準備ができているかどうかを検証します。

kops validate cluster --wait 10m

クラスターが正常になるまでしばらく待つ必要があります。

kops validate cluster --wait 10m

クラスタが正常になったら、次のコマンドを使用して、すべてのネームスペースのデフォルトのポッドを確認できます。

kubectl get pods -A

Helmを使用してNginxIngressControllerをセットアップする

Kubernetesクラスターの準備が整い、正常になったら、Helmを使用してNginxIngressControllerをインストールします。

続行する前に、Helmv3.5.3を使用していることを確認してください。

注:現在の場所にあるヘルムバイナリを使用したため、スクリーンショットで./helmを確認できます。

helm version

リポジトリを追加し、次のコマンドを使用してNginx IngressControllerHelmチャートをインストールします。 Helmを理解するには、前提条件のセクションに記載されているドキュメントを参照してください。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.publishService.enabled=true

上のスクリーンショットでは、ヘルムチャートがインストールされていることがわかります。

IngressControllerの一部として作成されたリソースを確認できます。

kubectl get pods
kubectl get deployment
kubectl get service

上のスクリーンショットでは、タイプLoadBalancerのサービス「nginx-ingress-ingress-nginx-controller」も作成されていることがわかります。これは、LoadBalancerがAWSアカウントで作成されたことを意味します。

NginxIngressによって作成されたLoadBalancerを指すレコードセットをRoute53に作成しますコントローラー

Kubernetesクラスターを作成したリージョンのAWSアカウントに移動します。 LoadBalancerを確認し、そのDNS名をコピーします。

次に、Route53に移動し、HostedZoneに単一のAレコードを作成します。

有効なレコードを作成すると、作成したレコードを使用して、作成したNginxIngressControllerを介してトラフィックをKubernetesクラスタにルーティングします。この場合、kops.devopslee.comは、トラフィックをNginxIngressControllerを介してKubernetesクラスタのサービスにルーティングします。

サンプルアプリケーションのオブジェクト定義ファイルを作成します

それでは、サンプルアプリケーションをデプロイするためのオブジェクト定義ファイルを作成しましょう。 3つのデプロイメントとデプロイメント用の3つのそれぞれのサービスを使用して3つのアプリケーションをデプロイします。次に、パスベースのルーティングを使用してIngressリソースを作成し、パスに基づいてkops.devopslee.comを使用してトラフィックをアプリケーションにルーティングします。

アプリケーション1用に1-nginx-main-app.yamlを作成します。

Githubリンク:ここをクリックして、Githubリポジトリからファイルをコピーします。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx-deploy-main
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx-main
  template:
    metadata:
      labels:
        run: nginx-main
    spec:
      containers:
      - image: nginx
        name: nginx


---
apiVersion: v1
kind: Service
metadata:
  name: nginx-deploy-main
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: nginx-main

アプリケーション2用に2-nginx-green-app.yamlを作成します。

Githubリンク:ここをクリックして、Githubリポジトリからファイルをコピーします。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx-deploy-green
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx-green
  template:
    metadata:
      labels:
        run: nginx-green
    spec:
      volumes:
      - name: webdata
        emptyDir: {}
      initContainers:
      - name: web-content
        image: busybox
        volumeMounts:
        - name: webdata
          mountPath: "/webdata"
        command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=green>GREEN</font></h1>" > /webdata/index.html']
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: webdata
          mountPath: "/usr/share/nginx/html"


---
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-deploy-green
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: nginx-green          

アプリケーション3用に3-nginx-blue-app.yamlを作成します

Githubリンク:ここをクリックして、Githubリポジトリからファイルをコピーします。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx-deploy-blue
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx-blue
  template:
    metadata:
      labels:
        run: nginx-blue
    spec:
      volumes:
      - name: webdata
        emptyDir: {}
      initContainers:
      - name: web-content
        image: busybox
        volumeMounts:
        - name: webdata
          mountPath: "/webdata"
        command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=blue>BLUE</font></h1>" > /webdata/index.html']
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: webdata
          mountPath: "/usr/share/nginx/html"


---
apiVersion: v1
kind: Service
metadata:
  name: nginx-deploy-blue
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: nginx-blue

パスベースの入力ルールを作成するための4-ingress.yamlを作成します。

Githubリンク:ここをクリックして、Githubリポジトリからファイルをコピーします。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: ingress-resource
spec:
  rules:
  - host: kops.devopslee.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-deploy-main
          servicePort: 80
      - path: /blue
        backend:
          serviceName: nginx-deploy-blue
          servicePort: 80
      - path: /green
        backend:
          serviceName: nginx-deploy-green
          servicePort: 80

これらのファイルはすべて、私のGithubリポジトリにあります。

サンプルアプリケーションをデプロイする

サンプルアプリケーションを1つずつデプロイして、そのステータスを確認しましょう。

kubectl apply -f 1-nginx-main-app.yaml
kubectl apply -f 2-nginx-green-app.yaml
kubectl apply -f 3-nginx-blue-app.yaml
kubectl get deployments
kubectl get pods
kubectl get service

入力オブジェクトをデプロイする

次に、パスベースのルーティングIngressリソースを作成します。同時に、Nginxポッドのログを確認してください。

kubectl logs nginx-ingress-ingress-nginx-controller-5c97c6b4d5-btvpl -f
kubectl apply -f 4-ingress.yaml

Ingressリソースが作成されるとすぐに、Nginxがその構成をロードしたことがわかります。

これで、同じホスト名、つまりkops.devopslee.comを使用して、異なるパスで3つの異なるアプリケーションにアクセスできるようになりました。

アプリケーションのURL、ここでのホスト名の名前はあなたによって異なります。

nginx-deploy-mainには、kops.devopslee.comからアクセスできます

nginx-deploy-greenには、kops.devopslee.com/greenと

からアクセスできます。

nginx-deploy-blueには、kops.devopslee.com / blue

からアクセスできます。

パスに基づいて同じホスト名を使用して、3つの異なるアプリケーションにアクセスできることがわかります。

結論

この記事では、Kopsを使用してKubernetesクラスタを作成する手順を説明しました。この記事では、主にHelmを使用したNginx Ingress Controllerのセットアップと、Ingressリソースを使用したパスベースのルーティングの作成に焦点を当てました。 3つの異なるサンプルアプリケーションをデプロイし、同じホスト名と異なるパスを使用してそれらにアクセスしてみました。


Linux
  1. NGINXとは何ですか?それはどのように機能しますか?

  2. Ubuntu18.04LTSのKubernetesクラスターにNginxロードバランシングをデプロイする方法

  3. 最初のポッドをKubernetesクラスターにデプロイする方法

  1. ヘルムとは何ですか?ヘルムチャートとヘルムチャートの説明

  2. KubernetesにWordPressインスタンスをデプロイする方法

  3. KubernetesにRedisクラスターをデプロイする方法

  1. chroot jailとは何ですか?その使用方法は?

  2. Kubernetes DaemonSetとは何ですか?その使用方法は?

  3. KubernetesにPostgreSQLをデプロイする方法