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

推薦する

航空機戦争ゲームを実装するためのネイティブJS

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

単一の MySQL テーブルで数千万のデータを処理するアイデアを共有する

目次プロジェクトの背景改善案データ特性を観察するマルチプロセスアイデアの要約データ処理スキルプロジェ...

MySQL遅延スレーブを導入するメリットのまとめ

序文MySQL のマスター/スレーブ レプリケーション関係は、厳密には「同期」または「マスター/スレ...

よく使われる HTML 形式のタグ_Powernode Java Academy

1. タイトルHTML では、<h1></h1> から <h6>...

ソースコード分析からTomcatがサーブレットの初期化を呼び出す方法の詳細な説明

目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

プログレッシブ ウェブ アプリ (PWA) の開発方法

目次概要必要とするアプリURL PWA にはどのような技術コンポーネントが必要ですか?マニフェストフ...

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

目次問題の説明:解決策1解決策2問題の説明:ページ A と B の 2 つがあり、各ページにはget...

Navicat for MySQL 15 登録とアクティベーションの詳細なチュートリアル

1. Navicat for MySQL 15をダウンロードするhttps://www.navica...

Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

ユーザーエクスペリエンスの構築

<br />おそらく、あなたは会社に入社したばかりで、その会社が「ユーザビリティ」に関す...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

MySQL イベント スケジューラに関するよくある話 (必読)

概要MySQL には独自のイベント スケジューラもあり、これは Linux の crontab ジョ...

Linuxのbasenameコマンドの使い方

01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...