kubernetes配備ingress+keepalived高可用性


kubernetesバージョン:1.17.3(クイックインストール:https://blog.csdn.net/w50feng/article/details/106470888)
 
ingress定義
Ingressは、クラスタ外部からクラスタ内サービスへのHTTPおよびHTTPSルーティングを開示する.トラフィック・ルーティングは、Ingressリソースで定義されたルールによって制御されます.詳細については、公式ドキュメントを参照してください.https://v1-17.docs.kubernetes.io/zh/docs/concepts/services-networking/ingress/
kubernetes部署ingress+keepalived高可用_第1张图片
 
keepalivedの紹介:
Keepalivedは、負荷バランスと高可用性のためのフレームワークを提供します.ロード・バランシング・フレームワークは、4階層目のロード・バランシングを提供する、よく知られているLinux仮想サーバ(IPVS)カーネル・モジュールに依存します.Keepalivedは、負荷バランスのとれたサーバプールを動的かつ適応的に維持および管理するために、稼働状況チェックのセットを実装します.仮想冗長ルーティングプロトコル(VRRP)は、高可用性を実現します.VRRPはルータのフェイルオーバの基礎レンガです.さらにkeepalivedはVRRP有限状態機のフックのセットを実現し,低レベルおよび高速プロトコルインタラクションを提供する.各Keepalivedフレームワークは、独立して使用することも、フレキシブルインフラストラクチャを提供するために一緒に使用することもできます.公式文書を添付:https://www.keepalived.org/doc/index.html
 
ingressの導入:
ingressをインストールする必要があるnodeにラベルを付けます.例えばnode 01とnode 02です.
kubectl label nodes node01 ingress=true
kubectl label nodes node02 ingress=true

クエリーlabel:kubectl get node--show-labels

ingressのyamlファイルのダウンロード:https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/deploy/static/mandatory.yaml

ファイルの変更:
kind:Deploymentをkind:DaemonSetに変更注記#spec.replicas:1;spec.spec内追加構成:hostNetwork:true#hostNetwork:trueを使用してネットワークを構成し、podで実行されているアプリケーションはホストホストのネットワークインタフェースを直接見ることができ、ホストが存在するローカルエリアネットワーク上のすべてのネットワークインタフェースはこのアプリケーションdnsPolicy:ClusterFirstWithHostNet#にアクセスすることができる.この設定はPODが使用するk 8 sのdnsである.dnsPolicy:ClusterFirstWithHostNetを追加しない場合、podはホストホストで使用されているDNSをデフォルトで使用します.これにより、コンテナ内でservice nameを介してk 8 sクラスタ内の他のPOD nodeSelector:ingress:'true'#nodeラベルにアクセスできなくなります.
kubernetes部署ingress+keepalived高可用_第2张图片
実行ファイル:kubectl apply-f mandatory 1.yaml
pod起動状態の表示:kubectl get pod-n ingress-nginx

dashboardデプロイメントnodeがnode 01とnode 02であることを確認
kubernetes部署ingress+keepalived高可用_第3张图片
 
keepalivedインストール:
Node 01とnode 02 yumを使用してインストール:yum install keepalived-y

プロファイルの変更、node 01がMASTER、node 02がBACKUP
vi/etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id k8singress #    ,   
}

vrrp_instance VI_1 {
    state MASTER  #  ,node01 MASTER,node02 BACKUP
    interface eth0 #vip       
    virtual_router_id 66 # master backup         ,id     
    priority 120 #   ,         master;node01 120,node02 110
    advert_int 1 #      
    authentication {
        auth_type PASS #  
        auth_pass 1111 #  
    }
    virtual_ipaddress {
        192.168.2.11 #  ip
    }
}

keepalivedの起動:systemctl start keepalived
自己起動:systemctl enable keepalived

クエリーVIP:node 01にVIPが表示され、node 02にはありません
node01:
kubernetes部署ingress+keepalived高可用_第4张图片
node02:

検証VIPフローティング、node 01を切断、vipフローティングnode 02、検証に成功
注意:スクリプトモニタリングingressステータスを追加し、その後更新します.の
 
検証ingree+vip:
vim nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-test
  namespace: ingress-nginx
  labels:
    name: nginx-test
spec:
  replicas: 1
  template:
    metadata:
      labels:
       name: nginx-test
    spec:
      containers:
      - name: nginx-test
        image: nginx:latest
        ports:
        - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
  name: nginx-test
  namespace: ingress-nginx
  labels:
    name: nginx-test
spec:
  type: ClusterIP
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
  selector:
    name: nginx-test
---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test
  namespace: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: test.nginx.com
    http:
      paths:
      - path:
        backend:
          serviceName: nginx-test
          servicePort: 80

アプリケーションの起動:kubectl apply-f nginx.yaml
podステータスの表示

kubernetes部署ingress+keepalived高可用_第5张图片
クライアントのhostsファイルの変更(windowsパス:C:WindowsSystem 32driversetc):
    192.168.2.11    test.nginx.com
ブラウザテスト、アクセス成功:
kubernetes部署ingress+keepalived高可用_第6张图片
 
 
--------日常記録----------