k8s に ingress-nginx をデプロイする手順

k8s に ingress-nginx をデプロイする手順

序文

k8sクラスタサービスがデプロイされたら、外部アクセス用のドメイン名を提供する必要があります。このとき、ingress-nginxが必要です。今日は皆さんと共有します

1. Ingressの展開と構成

1. 設定ファイルを取得する

#ファイルはローカルにダウンロードされました https://github.com/kubernetes/ingress-nginx/tree/nginx-0.20.0/deploy

2. 画像を準備する

ingress-nginx-nginx-0.20.0.zip を解凍します。
cd ingress-nginx-nginx-0.20.0/deploy/
vim required.yaml #その他のファイルのコレクション#mandatory.yamlファイルを編集し、defaultbackendイメージアドレスをAlibaba Cloudイメージアドレスに変更します(以下を参照)。
イメージ: registry.cn-hangzhou.aliyuncs.com/allinpay/defaultbackend-amd64:v1.5

ここに画像の説明を挿入

3. インストール

kubectl を適用 -f 必須.yaml 

ここに画像の説明を挿入

#しばらく待ってから、次のコマンドを使用してクエリを実行します。kubectl get namespace
kubectl ポッドを取得 -n ingress-nginx

ここに画像の説明を挿入

4. バックエンドポッドとサービス(pod-B、service-B)を作成する

vim デプロイデモ.yaml
APIバージョン: v1
種類: サービス
メタデータ:
  名前: myapp
  名前空間: デフォルト
仕様:
  セレクタ:
    アプリ: myapp
    リリース: カナリア
  ポート:
  - 名前: http
    ターゲットポート: 80
    ポート: 80
--- 
 APIバージョン: アプリ/v1
種類: デプロイメント
メタデータ:
  名前: myapp-deploy
  名前空間: デフォルト
仕様:
  レプリカ: 3
  セレクタ:
    一致ラベル:
      アプリ: myapp
      リリース: カナリア
  テンプレート:
    メタデータ:
      ラベル:
        アプリ: myapp
        リリース: カナリア
    仕様:
      コンテナ:
      - 名前: myapp
        イメージ: ikubernetes/myapp:v2
        ポート:
        - 名前: http
          コンテナポート: 80

#アプリケーション構成 kubectl apply -f deploy-demo.yaml
#kubectl get pods を表示

ここに画像の説明を挿入

5. サービスAを作成する

vim サービスノードポート.yaml
APIバージョン: v1
種類: サービス
メタデータ:
  名前: ingress-nginx
  名前空間: ingress-nginx
  ラベル:
    app.kubernetes.io/名前: ingress-nginx
    app.kubernetes.io/一部: ingress-nginx
仕様:
  タイプ: NodePort
  ポート:
  - 名前: http
    ポート: 80
    ターゲットポート: 80
    プロトコル: TCP
    ノードポート: 30080
  - 名前: https
    ポート: 443
    ターゲットポート: 443
    プロトコル: TCP
    ノードポート: 30443
  セレクタ:
    app.kubernetes.io/名前: ingress-nginx
app.kubernetes.io/一部: ingress-nginx

#アプリケーション構成 kubectl apply -f service-nodeport.yaml

#kubectl get svc -n ingress-nginx を表示

ここに画像の説明を挿入

外部ブラウザでアクセス: ip:30080

ここに画像の説明を挿入

この時点でエラーが発生する理由は、ingress-controller を service-B に関連付ける ingress ルールが生成されていないためです。

6. イングレスルールを定義する

ingress ルールを定義します。これは、ingress-controller (pod) の nginx.conf に自動的に挿入されます。
Ingress-controller は service-B に直接関連付けられていますが、ingress は途中でさまざまなルールを生成します。

vim イングレス-myapp.yaml
apiバージョン: extensions/v1beta1
種類: イングレス
メタデータ:
  名前: ingress-myapp
  名前空間: デフォルト
  注釈:
    kubernetes.io/ingress.class: "nginx"
仕様:
  ルール:
  - ホスト: myapp.magedu.com
    http:
      パス:
      - パス:
        バックエンド:
          サービス名: myapp
          サービスポート: 80

このとき、ingress-controller の nginx.conf に、アップストリーム構成などを含む nginx 仮想ホストのフィールドであるサーバー セグメント構成が自動的に生成されます。
アップストリームはバックエンド ポッド (pod-B) に自動的にプロキシします。これらはすべて自動的に生成されるため、自動構成生成と自動構成変更が実現されます。
この yaml ファイルを変更するだけです。

#アプリケーション構成 kubectl apply -f ingress-myapp.yaml

ここに画像の説明を挿入

外部ホスト上のホストファイルを構成する

ここに画像の説明を挿入

その後、ブラウザで再度アクセスすると、バックエンドポッドにアクセスできることがわかります。

ここに画像の説明を挿入

2. httpsを使用する

1. k8s 証明書を作成します (バックエンド ポッドと同じ名前空間が使用されることに注意してください)

kubectl -n デフォルトでシークレット tls ingress-test を作成します --key /home/centos/cert/cash432.key --cert /home/centos/cert/cash432.crt

2. イングレスルールを作成する

同じ名前空間に注意してください。そうしないと証明書が有効になりません。

vim ingress-myapp-cash432.yaml
apiバージョン: extensions/v1beta1
種類: イングレス
メタデータ:
  名前: ingress-myapp
  名前空間: デフォルト
  注釈:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/secure-backends: "true"
    kubernetes.io/ssl-passthrough: "true"
仕様:
  TLS: いいえ
  - ホスト:
    - myapp.cash432.xyz
    シークレット名: ingress-test
  ルール:
  - ホスト: myapp.cash432.xyz
    http:
      パス:
      - パス:
        バックエンド:
          サービス名: myapp
          サービスポート: 80

#アプリケーション構成 kubectl apply -f ingress-myapp-cash432.yaml

ブラウザアクセス

ここに画像の説明を挿入

これで、k8s に ingress-nginx をデプロイする手順に関するこの記事は終了です。k8s に ingress-nginx をデプロイする方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Ingress 7層ルーティングメカニズムは、k8sへのドメイン名アクセスを実装します。
  • k8s での Ingress のデプロイとルール作成の詳細な紹介

<<:  jquery-multiselect を使用した IE6 のバグの解決方法

>>:  Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

推薦する

Javascript における分割代入構文の詳細な説明

序文ES6 で初めて導入された「構造化代入構文」を使用すると、配列やオブジェクトの値を異なる変数に挿...

MySQL バッチ追加および保存メソッドの例

ストレステストにログインする際には、多くの異なるユーザーが必要となり、データベースに新しいデータを追...

Vueの監視プロパティの詳細

目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...

Linux で Jenkins プロジェクトを構築するプロセス (CentOS 7 を例に)

https://gitee.com/tengge1/ShadowEditor のデプロイメントを例...

Portainer を使用して複数の Docker コンテナ環境を管理する方法を説明します。

目次Portainerは複数のDockerコンテナ環境を管理します2. Dockerを管理する2.1...

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...

MySQL チュートリアル: サブクエリの例の詳細な説明

目次1. サブクエリとは何ですか? 2. サブクエリはどこに表示されますか? 3. Whereサブク...

JavaScript BOM の説明

目次1. BOMの紹介1. JavaScriptは3つの部分から構成される2.ウィンドウオブジェクト...

dockerを使用してdubboプロジェクトをデプロイする方法

1. まず、Springbootを使用して簡単なDubboテストプログラムを構築し、関連する依存関係...

PHP で JSON バックスラッシュを削除する例

1. 「stripslashes($_POST['json']);」メソッドを使用し...

Linux で PCIe のバージョンと速度を確認する方法

PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...

CSSはcalc()を使用して現在の表示画面の高さを取得します

まず、CSS3 の相対的な長さの単位を見てみましょう (詳細なチュートリアルを参照してください)。相...

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

ウェブサイトのフッター沈下現象に対する3つの解決策を詳しく解説

背景多くのウェブサイトのデザインは、一般的にコンテンツ+フッターの2つの部分で構成されています。コン...