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 でベクター グラフィックスを使用する方法

推薦する

HTML タグのカスタム属性に関する質問

以前の開発では、クラス、名前などの HTML のデフォルト属性を使用していました。 Huawei社の...

Linuxカーネルスケジューラソースコード初期化の分析

目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...

MySQL を暗号化および復号化するいくつかの方法 (要約)

目次前面に書かれた双方向暗号化エンコード/デコードAES_ENCRYPT/AES_DECRYPT D...

Docker ベースのよく使われる CentOS7 イメージの概要

目次1 Dockerをインストールする2 国内ミラーソースの設定3 中国語環境基本版Centos7イ...

MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明

1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...

Linuxの貼り付けコマンドの使い方

01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...

js 正規表現の先読みと後読み、および非キャプチャグループ化

目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...

MySQL msiバージョンのダウンロードとインストールの初心者向けの詳細なグラフィックチュートリアル

目次1. MySQL msiバージョンをダウンロードする2. インストール3. 環境変数を設定する1...

2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い

ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...

Ubuntu 20.04の新バージョンでルートユーザーを使用してシステムにログインする方法の詳細なチュートリアル

Ubuntu 20.04 では、デフォルトで root ログインが有効になっていないため、デスクトッ...

jQueryはクッキーを操作する

コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...

MySQL グリーンバージョン設定コードと 1067 エラーの詳細

MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 &#...

JavaScript イベント委任 (プロキシ) の使用例の詳細

目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...