K8Sは、可用性の高い進入を展開します

イングレスの展開は、高可用性

公式ウェブサイトのアドレスhttps://kubernetes.github.io/ingress-nginx/deploy/

イングレス振り付けファイルを取得します。

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

ノードラベルを追加します。

kubectl label node k8snode1 ingresscontroller=true
kubectl get nodes --show-labels

添付ファイル:

  • 削除ラベル
    kubectl label node k8snode1 ingresscontroller-
  • 更新ラベル
    kubectl label node k8snode1 ingresscontroller=false --overwrite

1、展開がDaemonSetあり、変更、およびコピー数をコメントアウト

kind: DaemonSet
  #replicas: 1

2、hostNetworkネットワークを有効にし、指定されたノードを実行します

関連事業、このノードのホストノードは、このアプリケーションがポートを介してアクセス可能なネットワーク上の他のホストのホストへの進入、nginxのコントローラポートのhostNetwork露光。

Ingresscontrollerは=真タグを加えた指定されたノードnodeSelector前

      hostNetwork: true
      nodeSelector:
        ingresscontroller: 'true'

3、ミラーアドレスの変更
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.24.1

図4に示すように、修飾されたコンテナ港

          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
            - --annotations-prefix=nginx.ingress.kubernetes.io
            - --http-port=88 #默认80
            - --https-port=4433 #默认443
            
            
          ports:
            - name: http
              containerPort: 88 #更改为88
            - name: https
              containerPort: 4433 #更改为4433

図5に示すように、マスタノード耐性を増加させます

      tolerations: #增加容忍,可分配到master节点
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"

6、mandatory.yamlは、以下の
vim mandatory.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: udp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: nginx-ingress-clusterrole
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - endpoints
      - nodes
      - pods
      - secrets
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - services
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
  - apiGroups:
      - "extensions"
      - "networking.k8s.io"
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - "extensions"
      - "networking.k8s.io"
    resources:
      - ingresses/status
    verbs:
      - update

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: nginx-ingress-role
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - pods
      - secrets
      - namespaces
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      # Defaults to "<election-id>-<ingress-class>"
      # Here: "<ingress-controller-leader>-<nginx>"
      # This has to be adapted if you change either parameter
      # when launching the nginx-ingress-controller.
      - "ingress-controller-leader-nginx"
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get
      
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: nginx-ingress-role-nisa-binding
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: nginx-ingress-role
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: nginx-ingress-clusterrole-nisa-binding
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: nginx-ingress-clusterrole
subjects:
  - kind: ServiceAccount
    name: nginx-ingress-serviceaccount
    namespace: ingress-nginx

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"
    spec:
      # wait up to five minutes for the drain of connections
      terminationGracePeriodSeconds: 300
      serviceAccountName: nginx-ingress-serviceaccount
      hostNetwork: true
      nodeSelector:
        ingresscontroller: 'true'
      tolerations: #增加容忍,可分配到master节点
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"
      containers:
        - name: nginx-ingress-controller
          image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.24.1
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
            - --annotations-prefix=nginx.ingress.kubernetes.io
            - --http-port=88 #默认80
            - --https-port=4433 #默认443
          securityContext:
            allowPrivilegeEscalation: true
            capabilities:
              drop:
                - ALL
              add:
                - NET_BIND_SERVICE
            # www-data -> 33
            runAsUser: 33
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
            - name: http
              containerPort: 88 #更改为88
            - name: https
              containerPort: 4433 #更改为4433
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
          lifecycle:
            preStop:
              exec:
                command:
                  - /wait-shutdown

テスト

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-static
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-static
  labels:
    name: nginx-static
spec:
  replicas: 1
  template:
    metadata:
      labels:
       name: nginx-static
    spec:
      containers:
       - name: nginx-static
         image: nginx:latest
         volumeMounts:
          - mountPath: /etc/localtime
            name: vol-localtime
            readOnly: true

         ports:
          - containerPort: 80
      volumes:
         - name: vol-localtime
           hostPath:
            path: /etc/localtime
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-static
  labels:
   name: nginx-static
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
  selector:
    name: nginx-static

--- 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: submodule-checker-ingress
spec:
  rules:
  - host: nginx.weave.pub
    http:
      paths:
      - backend:
          serviceName: nginx-static
          servicePort: 80

kubectl create -f nginx-static.yaml

アクセス

vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.x.x.x master1 nginx.test.pub
10.x.x.x master2
[root@master1 ingress]# curl nginx.test.pub
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

1.1のIngressプロフィール

1.1.1デマンド

  ポート:corednsは、ドメイン名ポッド、外部サービス場合は、サービスにアクセスするために必要、対応するNodeIPにアクセスする必要の間で達成されます。サービスが増加した後ただし、ホストポートを指定するNodePortの必要性のために、より多くのポートは管理が困難になります。したがって、この場合には、進入がより適切なサービスを公開使います。

1.1.2進入コンポーネント説明

  リバースプロキシ、ロードバランサ、イングレスコントローラー、イングレス:イングレスの使用は一般的に3つの要素を持っています

図1に示すように、リバースプロキシロードバランサ

  プロキシロードバランサは非常に簡単ですリバース、それはnginxのを意味し、apacheのミドルウェアは、新しいK8Sはありません別の展開nginxのよう、あなただけのIngressコントローラーを展開する必要があり、一つの成分の中に進入コントローラとのnginxのを持っています。リバースプロキシ、ロードバランサを自由にクラスタにデプロイすることができ、あなたが途中でそうレプリケーションコントローラー、展開、DaemonSetを使用することができます

2、イングレス・コントローラ

  イングレスコントローラは、基本的なアドオンとして、など常にkubernetesのAPIを扱う、リアルタイム知覚バックエンドサービス、変更ポッドによってモニター、進入コントローラとして理解し、ポッド、サービスおよびその他の増減を減らすことが、これらの変更は、情報を取得するとき後に、イングレスコントローライングレスの再結合は、以下の構成を生成し、その後、リバースプロキシ、ロードバランサを更新し、その設定を更新し、サービスディスカバリの役割に

3、イングレス

  このルールは入力コントローラに結合し、およびコントローラ入口の動的ライトこれに、例えば、サービスときにドメインの要求に転送サービス、すなわち、に対応するドメイン名、入口は、上記で定義されたルールを理解するための簡単です全体的なサービスの発見を達成するため、負荷分散でのロードバランサの設定

下に示すように、全体の関係:

  あなたは明らかに上の画像から見ることができ、要求は実際に、どのサービスに、そのサービスを通じて、ドメイン名の対応とその相互作用を介して、その後のIngressイングレスコントローラは、APIのkubernetesと対話するためにこのようなnginxのように来たか、ロードバランサをブロックされました住所やその他の情報は、サービスの発見、すなわち動的なマッピングを実現することができ、ルールをリロードし、その後、リアルタイムのロードバランサ、ロードバランサの後に書かれており、総合的なプロファイルを生成します。

3.1.3 nginxの-イングレスの作品

  入力コントローラと知覚入力クラスタに対話、動的ルールの変更を介してAPIをkubernetes、それを読んで、カスタムルールのルールに従って、いくつかのnginxの設定を生成対応するドメインネームサービスのどれを記載しており、次いでnginx-を書い構成を検証するためにそれを再読み込み、その後そして、実行nginxのサービスにおけるポッドの進入コントローラは、コントローラが書き込み/etc/nginx.conf nginxの設定ファイルを生成する場所のポッド入力制御。設定され、動的に更新サブドメイン名を達成するために。

説明:別の開発会社に基づいて入力コントローラnginxのサービスに基づいては、に分かれています。

  • K8Sコミュニティアングル - nginxの(https://github.com/kubernetes/ingress-nginx)
  • nginxののnginxの-イングレス(https://github.com/nginxinc/kubernetes-ingress)

3.2.4イングレスコントローラの高可用性アーキテクチャ

  クラスタトラフィックアクセス層として、イングレスコントローラの高可用性が特に重要であり、高可用性、我々は最初の問題を解決しなければならない単一障害点で、一般的に使用される方法は、展開の複数のコピーを使用することで、我々は、高可用性のIngressコントローラー・クラスターに接続Kubernetesを展開ビジネスアプリケーションやサービスリソースのための進入競争の発生を回避するために、クラスタトラフィックのアクセスポート、排他的Ingressノードの提案方法、など、と理由イングレスのマルチノード展開アーキテクチャの同じ層に。

  図配備アーキテクチャ上述したように、入口は、容量Ingressノードスケーリングのレベルに基づいてトラフィックの後端部が、入口流れ統合アクセス層排他的キャリアクラスタインスタンスの複数。お使いのクラスタサイズが大きい早期にない場合はもちろん、それも仕方のIngressサービスアプリケーションミックスや事業部門を使用しますが、リソースの制約との分離を推奨することができます。

おすすめ

転載: www.cnblogs.com/keep-live/p/11882829.html