使用して、リバースプロキシK8Sダッシュボードをtraefik

生産環境、外部被ばくと進入ロードバランササービスのK8Sクラスタは、2つの方法で、主に以下のとおりです。

  • ロードバランサは:クラウドは、サポートする能力IPVSのiptables /に頼って、ある機能のバランスを使用K8Sサービス負荷を、必要性をベンダー、それは、種々のプロトコルのために使用することができます
  • 入口:比較的柔軟でのみHTTP / HTTPSプロトコル、付加サービスの必要性、ならびにこのシナリオでは、リバースプロキシ入力コントローラ、nginxのリバースプロキシに使用リバースプロキシサーバを介して負荷分散はK8Sの時代に、よく知られています、あったnginxの入コントローラのnginxの+入力の組み合わせである、入力コントローラは、構成変更が再起動nginxの場合には、入口リソースのnginxの構成を生成する責任があります。、再起動する必要があり、また一つとして含む入力コントローラに対応するクラウドネイティブリバースプロキシtraefik、されており、動的アウェアルーティングルールを変更することができます。

traefikは比較的新しいリバースプロキシ、インターネット関連情報が特に豊富ではないです、K8Sダッシュボードに成功した訪問の前に数日間の研究では、このレコード内の重要なポイントの一つとなります。

インストールtraefik

使用ヘルムのインストール、使用traefik 1.7.19最新チャート:

helm install stable/traefik -f traefik-values.yaml

traefik-values.yaml:

rbac:
  enabled: true
dashboard:
  enabled: true # 启用traefik dashboard
  ingress:
    annotations:
      traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
deployment:
  hostPort:
    httpEnabled: true # traefik pod所在node上开启80端口
    httpsEnabled: true # traefik pod所在node上开启443端口
    dashboardEnabled: true # traefik pod所在node上开启8080端口,共traefik dashboard使用
ssl:
  insecureSkipVerify: true # frontend不验证https的benkend
  enabled: true # 启用https入口
extraVolumes:
  - name: traefik-ssl
    hostPath:
      path: /share/k8s/traefik/ssl # 其中存放https入口的证书和key,名字必须为tls.crt,tls.key
      type: DirectoryOrCreate
extraVolumeMounts:
  - name: traefik-ssl
    mountPath: /ssl   # traefik pod从/ssl目录读取上述tls.crt,tls.key

詳細な設定方法を参照してください公式文書を次のように、上記のキーポイントは以下のとおりです。

  1. HTTPS入口K8Sによって提供ssl.enabled = trueの場合、証明書および鍵、ローカルディレクトリからノードによって、上記したノードの実施形態では、各ノードの第1ノードとプット証明書キーにポッドを取り付ける、より良い方法を開い秘密は、その秘密を作成するために、ポッドを搭載します
  2. どのように玄関へのアクセスに、私は、あなたがHTTP経由で、どこノードポッドを通じて入り口にアクセスすることができ、ノード上の開いているポートを介していた:// nodeipまたはhttps:// nodeip、あなたもそうでhttp、サービスのNodePortタイプを使用することができます。 //任意の-nodeip:HTTP-nodeportまたはhttps://任意の-nodeip:HTTPS-nodeportアクセス、値セットのサービス種別:nodePort
  3. 私はデフォルトの名前を使用するルールに一致PathPrefixStripルートはホストの試合です

traefikのダッシュボードが有効になっているため、インストールが自動的に進入のダッシュボードtraefikを作成します。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
  labels:
    app: traefik
    chart: traefik-1.82.1
    heritage: Tiller
    release: traefik
  name: traefik-dashboard
  namespace: default
spec:
  rules:
  - host: traefik.example.com
    http:
      paths:
      - backend:
          serviceName: traefik-dashboard
          servicePort: dashboard-http

ラベルアプリによってtraefik:侵入traefikの必要な認識を選択します。あなたは進入ノートがタグを含む追加しました。注釈およびホスト上の値から導出されています。私がホストをしたくないので、次のように、そうPathPrefixStripルーティングルールを使用し、私は上記の侵入を変更しました:

spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: traefik-dashboard
          servicePort: dashboard-http
        path: /traefik

HTTPを使用している場合よう:// nodeip / traefikノードはまた、ダッシュボードのポートを開き、またはHTTP経由するので、ダッシュボードにアクセスすることができます:// nodeip:8080訪問。

K8Sダッシュボード演技

最新K8Sダッシュボード(V2.0.0-beta6)はkubernetes・ダッシュボードの名前空間をマウント:

kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.254.238.13    <none>        8000/TCP        21d
kubernetes-dashboard        LoadBalancer   10.254.253.226   <pending>     443:30223/TCP   21d

増加した侵入:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
  labels:
    app: traefik
  name: kubernetes-dashboard
  namespace: default
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 443
        path: /k8s

HTTPSプロキシのバックエンド

K8Sダッシュボードは、唯一の最初の質問は、バックエンドのルーティングへのフロントエンドは、以下の状況をどのように表示されるか立ち往生HTTPSプロキシサービスで、HTTPSアクセスをサポートしています。

  1. HTTP-> HTTP

  2. HTTP-> HTTPS

  3. https-> HTTP

  4. https-> HTTPS

バックエンドがhttps、あるときかフロントエンドHTTPまたはHTTPS、あること、2及び4は、500エラーが報告されます、検証することができないため、フロントエンド、バックエンド、今回のソリューション:

  • insecureSkipVerifyを設定し、これは常にセットリダイレクトはhttpsを使用して最善の方法のフロントエンドである場合、これは、比較的簡単ですどちらか
  • どちらの設定入口TLS、TLS証明書情報の設定]ホスト

セットinsecureSkipVerify方法私が使用していました。一般的には最良の方法は、バックエンドのhttps重要でないかどうか、そして、TLSを終了し、httpsを使用常に入り口を使用することです。

異なる名前空間のサービスを代行

名前空間全体で上記の問題を解決した後、次の出会いK8Sダッシュボードサービスすることはできません赤でtraefikダッシュボードディスプレイのアクセスの問題、デフォルトの名前空間にデフォルトでインストールさヘルムtraefikはむしろK8Sダッシュボードがkubernetes、ダッシュボードの名前空間を搭載しているため、あなたはアクセスできないサービスに、解決策:

  • 同じスペースに設置traefikとK8Sダッシュボードのどちらか

  • ExternalNameによってデフォルトの名前空間へのダッシュボードサービスのどちらか

    apiVersion: v1
    kind: Service
    metadata:
     name: kubernetes-dashboard
     namespace: default
    spec:
     ports:
     - name: https
       port: 443
       protocol: TCP
       targetPort: 443
     sessionAffinity: None
     type: ExternalName
     externalName: kubernetes-dashboard.kubernetes-dashboard.svc.cluster.local
    

ExternalName方法私が使用していました。完全なドメインネームサービスがservicename.namespace.svc.cluster.localで、cluster.local kubeletが設定されています。

パスルーティングに基づいて、

サービスが訪問することができますが、登場MIMEタイプがサポートされたスタイルシートのMIMEタイプのエラーではありません。

画像-20191129064738766

当初、私はそれがtraefikだと思ったにREPONSEヘッダにX-Content-Typeの-オプションに参加しました:nosniffが、traefikのデフォルトが追加されていません発見しました。

最後に私がホストを使用していない、唯一の入力パスルーティングを使用して、URLパスを発見しました。

使用しているときのhttps:とき// nodeip / K8SアクセスK8Sダッシュボード、ルーティングルールはPathPrefixStripをしているので、バックエンドの要求にはhttps:// nodeip、その後、自宅を取得し、ファイル名がK8S、CSSのメインページK8S、JS、であるなど要求URLがhttpsであるように、ファイル・パスは、現在のドキュメントのパスからの相対である://nodeip/xxx.cssは、あなたは、道路、上記のエラーのルールに一致していません。

すべての通常の// nodeip / K8S /アクセスダッシュボード、:あなたは、httpsを使用した場合。

だから、家の定義の中で特定のルートに一致するパスを使用して、リスク、およびリソース・パスがあります:

ホームページ、CSS、JSおよびその他のリソースパス定義された方法 説明
ベースではなく、リソースへのパス./または../および/または冒頭に定義されていない
<base href="./">で始まるリソースパスを./
1.マッチ/パス、HTTPSのみを介し:// XXXX /パス/アクセス
2.マッチ/パス、およびHTTPSを介して後端サブ/、このときにリダイレクト:// XXXX /パス/またはhttps:// XXXX /パスがアクセスすることができます
<base href="/">、リソースのパスではないと./または../または/始まります 一致/他のパスが機能していない一致しただけ
な単眼として、実際に遭遇したように、Aの状況を

最良一致させる方法やホストルートので。

ダッシュボードの認定

上記の問題点を理解した後、最後にダッシュボードのログイン画面へ:

画像-20191129063718980

最初に私には、HTTPの入り口を使用した、トークン着陸アプローチを使用して、応答がない、ビューのツールの開発を通して、使用中の問題を見つけるのhttp入り口、ヘッダはjweTokenを運ばない、認証が失敗した場合、あなたはhttpsの入り口を使用する必要があります。

あるkubectlプロキシの採用、前にリコールhttp://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/も着陸ではないが、実際には、同じ問題です。

HTTPを使用入学着陸に失敗しました:

画像-20191129064020553

httpsのエントリを使用する場合は、jweTokenは、着陸の成功を運んでいます。

画像-20191129064137163

だから、決定的なセットのフロントエンドは常にHTTPS、値がtraefik.ingress.kubernetes.io/redirect-entry-point増加:HTTPS、そして指揮は、アップグレード進入自身のニーズに独自の変更を増やします:

dashboard:
  enabled: true
  ingress:
    annotations:
      traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
      traefik.ingress.kubernetes.io/redirect-entry-point: https
      # 不要使用ingress.kubernetes.io/ssl-redirect: "true",因为会丢掉path

かどうかは、そのような使用のhttp:// nodeip / K8S /またはhttps:// nodeip / K8S /成功裏に着陸することができます。

ようこそ忠パンさんのブログ

おすすめ

転載: www.cnblogs.com/zhongpan/p/11963894.html