コンテナークラウドプラットフォームNo.4〜kubernetesサービス公開Ingress

これは、コンテナのクラウドプラットフォームでは4番目、その後続けて、
最初のkubernetesサービス、次の方法を公開します:

  • NodePort
  • 負荷平衡
  • ClusterIP
  • イングレス

この記事は最初のアーキテクチャ図に近く、Ingressのみを紹介しています。残りの部分については後で詳しく説明します。

Ingressとは何ですか?

Ingressは、クラスタ内のサービスへの外部アクセスを管理するAPIオブジェクトです。一般的なアクセス方法はHTTPです。もちろん、TCPも管理できます。
Ingressは、負荷分散、SSL終了、ドメインベースの仮想ホスティングを提供できます。
一般的なものは次のとおりです。kubernetesクラスタによってデプロイされたサービスを公開して、クラスタ外のユーザーまたはサービスがアクセスできるようにします。

kubernetesにイングレスを提供できるコントローラは多数あります。この記事では、HAProxyベースのコントローラHaproxy Ingreessを使用します。
HAProxyは、高速で信頼性の高いTCPおよびHTTPリバースプロキシおよびロードバランサーです。
もちろん、kubernetesクラスターは複数のIngressコントローラーを同時にデプロイすることもできます。

HAProxyイングレス

HAProxy Ingressは、Kubernetes APIをモニタリングしてサービスバックエンドのポッドステータスを取得し、haproxyの構成ファイルを動的に更新して、負荷分散を実現します。
これにより、クラスターのサイズに関係なく、非常に低いレイテンシで、エージェントごとに1秒あたり数千のリクエストが可能になります。

簡単な紹介、そして実際の戦闘。

HAProxy Ingressをkubernetesクラスターにデプロイする

  1. yamlデプロイメントファイルをダウンロードします。wget https://haproxy-ingress.github.io/resources/haproxy-ingress.yaml
  2. haproxy-ingress.yamlを変更します。現在バージョン1.19を使用しており、一部のAPIバージョンの有効期限が切れているため、次の
    rbac.authorization.k8s.io/v1beta1変更を変更する必要がありrbac.authorization.k8s.io/v1ます。警告を変更する必要はないが、現在のバージョンには影響しません
  3. デプロイ:kubectl apply -f haproxy-ingress.yaml
    [root@k8s-master001 opt]# kubectl  apply -f haproxy-ingress.yaml 
    namespace/ingress-controller created
    serviceaccount/ingress-controller created
    Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
    clusterrole.rbac.authorization.k8s.io/ingress-controller created
    Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
    role.rbac.authorization.k8s.io/ingress-controller created
    Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
    clusterrolebinding.rbac.authorization.k8s.io/ingress-controller created
    Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding
    rolebinding.rbac.authorization.k8s.io/ingress-controller created
    configmap/haproxy-ingress created
    daemonset.apps/haproxy-ingress created
  4. 展開ステータスを表示する

    [root@k8s-master001 opt]# kubectl  get all -n ingress-controller
    NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR AGE
    daemonset.apps/haproxy-ingress   0         0         0       0            0           role=ingress-controller   6m2s

    一体一体どうしてhaproxyに関連するポッドがないのですか?
    コンテナークラウドプラットフォームNo.4〜kubernetesサービス公開Ingress

  5. haproxy-ingress.yamlファイルを見て、nodeSelectorノードラベルセレクターが定義されていることを確認しますが、クラスターノードにはこのラベルが付いたマシンがないため、ノードに適切なラベルを設定する必要があります。そうしないと、ポッドを
    手動で作成しなくなりますmaster003にラベルを追加するrole=ingress-controller
    [root@k8s-master001 opt]#  kubectl label node k8s-master003 role=ingress-controller
    node/k8s-master003 labeled
  6. もう一度確認しましょう。すでにhaproxy-ingress-6mfqrがあり、ステータスはRunningです。つまり、デプロイされたことを意味します~~~

    [root@k8s-master001 opt]# kubectl  get all -n ingress-controlle
    NAME                        READY   STATUS    RESTARTS   AGE
    pod/haproxy-ingress-6mfqr   1/1     Running   1          2m40s
    
    NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR             AGE
    daemonset.apps/haproxy-ingress   1         1         1       1            1           role=ingress-controller   18m

Ingressを使用してサービスを公開する

ここでは、前の記事でデプロイしたnginxを例として使用し、前の記事をデプロイして、nginxのステータスを確認します

[root@k8s-master001 ~]# kubectl  get po,svc
NAME          READY   STATUS    RESTARTS   AGE
pod/nginx-0   1/1     Running   0          32h

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        2d2h
service/nginx        NodePort    10.106.27.213   <none>        80:30774/TCP   32h

nginxという名前のサービスがあることがわかります

[root@k8s-master001 ~]# cat ingress.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress.class: haproxy
spec:
  rules:
  - host: nginx.ieasou.cn
    http:
      paths:
       - path: /
         backend:
           serviceName: nginx
           servicePort: 80

デプロイを実行すると、kubernetes apiVersionが更新され、extensions / v1beta1は今後サポートされなくなるため、警告が表示されます。これは影響を受けません。最初に無視してください。

[root@k8s-master001 ~]# kubectl  apply -f ingress.yaml
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.extensions/nginx configured

導入結果を表示する

[root@k8s-master001 ~]# kubectl  get ing 
NAME    CLASS    HOSTS             ADDRESS   PORTS   AGE
nginx   <none>   nginx.test.cn             80      21m

ここで、nginx.test.cnをhaproxy-ingresssが配置されているノードのIPに解決する必要があります。この記事では、
テストのためにhaproxy-ingresssがmaster003(10.26.25.22)にデプロイされている場合、/ etc / hostsファイルを直接変更してnginx.testにアクセスできます。 cn

[root@k8s-master001 ~]# curl -I nginx.text.cn
HTTP/1.1 200 OK
server: nginx/1.19.2
date: Sat, 12 Sep 2020 12:40:01 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 11 Aug 2020 14:50:35 GMT
etag: "5f32b03b-264"
accept-ranges: bytes
strict-transport-security: max-age=15768000

結果からわかるように、ステータスコードが返され、デプロイされたnginxサービスにアクセスできることが示されます。
コンテナークラウドプラットフォームNo.4〜kubernetesサービス公開Ingress

注:記事の画像はインターネットからのものです。侵害がある場合は、時間をかけて削除するように私に連絡してください。
ヒント:より良い記事については、一般の人に注意してください*「ルーキーの運用とメンテナンストーク」!

おすすめ

転載: blog.51cto.com/1648324/2536249