これは、コンテナのクラウドプラットフォームでは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クラスターにデプロイする
- yamlデプロイメントファイルをダウンロードします。
wget https://haproxy-ingress.github.io/resources/haproxy-ingress.yaml
- haproxy-ingress.yamlを変更します。現在バージョン1.19を使用しており、一部のAPIバージョンの有効期限が切れているため、次の
rbac.authorization.k8s.io/v1beta1
変更を変更する必要がありrbac.authorization.k8s.io/v1
ます。警告を変更する必要はないが、現在のバージョンには影響しません - デプロイ:
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
-
展開ステータスを表示する
[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に関連するポッドがないのですか?
- haproxy-ingress.yamlファイルを見て、nodeSelectorノードラベルセレクターが定義されていることを確認しますが、クラスターノードにはこのラベルが付いたマシンがないため、ノードに適切なラベルを設定する必要があります。そうしないと、ポッドを
手動で作成しなくなりますmaster003にラベルを追加するrole=ingress-controller
[root@k8s-master001 opt]# kubectl label node k8s-master003 role=ingress-controller node/k8s-master003 labeled
-
もう一度確認しましょう。すでに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サービスにアクセスできることが示されます。
注:記事の画像はインターネットからのものです。侵害がある場合は、時間をかけて削除するように私に連絡してください。
ヒント:より良い記事については、一般の人に注意してください*「ルーキーの運用とメンテナンストーク」!!!