入力 はKubernetesの重要な概念の1つであり、外部ユーザーが FQDNを使用してコンテナ化されたアプリケーションにアクセスできるようにします。 (完全修飾ドメイン名)。 Ingressは有効になっておらず、デフォルトでKubernetesクラスターにインストールされています。 Nginx、Traefik、HAProxy、Istioなどのサードパーティの入力コントローラーを使用して、このコアコンセプトを有効にする必要があります。
このチュートリアルでは、KubernetesクラスターでNGINXIngressコントローラーをセットアップして使用する方法を示します。
上の図のように、外部ユーザーはFQDNを介してNGINX Ingress Controllerを使用してアプリケーションにアクセスしており、内部Ingress Controllerはリクエストをサービスにルーティングしてから、サービスはリクエストをバックエンドエンドポイントまたはポッドにルーティングします。
MinikubeでNGINXIngressControllerを有効にする
MinikubeはシングルノードのKubernetesクラスタであり、「minikubeアドオン」を実行することで、minikubeでnginxingressコントローラーを簡単に有効にできます。 」コマンド。
以下のコマンドを実行して、入力コントローラーのステータスを確認します。
# minikube addons list
次のminikubeコマンドを実行して、入力コントローラーを有効にします。
[[email protected] ~]# minikube addons enable ingress * The 'ingress' addon is enabled [[email protected] ~]#
「minikubeaddonslist」コマンドを再実行すると、今度は入力のステータスが有効になっていることを確認する必要があります。
次のkubectlコマンドを実行して、入力コントローラーのポッドが実行されているかどうかを確認します。
[[email protected] ~]# kubectl get pods --all-namespaces | grep -i nginx-controller kube-system ingress-nginx-controller-7bb4c67d67-gkjj5 1/1 Running 0 20m [[email protected] ~]#
上記の出力は、nginx-controllerが有効になっていて、kube-system名前空間でポッドを正常に開始したことを確認しています。
Kubernetesクラスター(ベアメタル)に入力コントローラーをセットアップする
注: Kubernetesクラスターが稼働していると想定しています。
マスターノードまたはコントロールプレーンにログインし、次のkubectlコマンドを実行して入力をインストールします。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/baremetal/deploy.yaml
出力、
Ingressステータスを確認し、kubectlコマンドの下で実行します
[[email protected] ~]$ kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-4phb2 0/1 Completed 0 8m53s ingress-nginx-admission-patch-m9t8z 0/1 Completed 2 8m53s ingress-nginx-controller-f9d6fc8d8-r92jd 1/1 Running 0 8m53s [[email protected] ~]$ $ kubectl get all -n ingress-nginx
上記の出力は完璧で、Ingressコントローラーが正常にインストールされたことを確認します。
テスト入力コントローラー
Ingressコントローラーをテストするには、最初にhaproxyに次のエントリを追加します。入力コントローラーポッドはworker-node2で実行されているため、NodePortとともにworker-node2について説明しました。
ファイルを保存して閉じてから、haproxyサービスを再起動します。
「myapp」という名前でnginxベースのデプロイを作成します
$ kubectl create deployment myapp --image=nginx deployment.apps/myapp created $
タイプ「NodePort」でデプロイメントを公開してサービスを作成します
$ kubectl expose deployment myapp --name=myapp --type=NodePort --port=80 service/myapp exposed $
展開とサービスのステータスを確認し、実行します
$ kubectl get deployments myapp $ kubectl get svc myapp
出力、
myappの入力リソースを作成する
次の内容でdemo-ingress.yamlファイルを作成します。このファイルを適用すると、アプリケーションがホスト名を介してkubernetesクラスターの外部からアクセスできるようにする入力リソースが作成されます。したがって、この場合、アプリケーションのホスト名は「myapp.example.com」です
$ vi demo-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-demo spec: ingressClassName: nginx rules: - host: "myapp.example.com" http: paths: - pathType: Prefix path: / backend: service: name: myapp port: number: 80
ファイルを保存して閉じます。
kubectlコマンドの下で実行して、上記の入力リソースを作成します。
$ kubectl create -f demo-ingress.yaml ingress.networking.k8s.io/ingress-demo created $
以下を実行して、上記で作成した入力リソースのステータスを確認します
$ kubectl get ingress ingress-demo $kubectl describe ingress ingress-demo
上記の出力は完璧で、入力リソースが正常に作成されたことを確認します。
クラスタの外部からこれらのURLにアクセスする前に、これらにアクセスする予定の場所からシステムのhostsファイルに次のエントリを追加してください。
192.168.1.240 myapp.example.com
次に、WebブラウザからURLにアクセスして、「
」と入力します。http://myapp.example.com
上記は、Kubernetesにnginxingressコントローラーを正常にデプロイしてセットアップしたことを示しています。貴重なフィードバックやコメントをぜひ共有してください。