<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基礎指南:如何在K3s中配置Traefik?

          共 6828字,需瀏覽 14分鐘

           ·

          2021-02-05 21:16

          云由臨時的服務器組和向服務器分配容器的方法組成。容器是一種將應用程序打包到標準化單元中的方法,以便該應用程序可以在云中的任何服務器上平穩(wěn)運行。經(jīng)常出現(xiàn)的問題是需要將外部客戶端的流量定向到云內(nèi)的容器中,同時確保外部客戶端不與云綁定。針對該問題,一個常見的解決方案是創(chuàng)建一個Ingress controller。


          Kubernetes的Ingress


          Kubernetes Ingress有兩個要求:


          • Ingress controller

          • Ingress


          這是為Kubernetes配置Ingress的端到端設置示例,以便集群的外部客戶端可以Ingress controller訪問集群內(nèi)運行的Pod。一旦流量被引導到pod,流量將被引導至該Pod內(nèi)的正確容器中。在本文中我們將K3s部署到樹莓派上構(gòu)建集群。您可以參考我們往期教程,了解如何在樹莓派上搭建K3s集群:

          超強教程!在樹莓派上構(gòu)建多節(jié)點K8S集群!



          上圖描述了以下組件的工作:


          客戶端希望將流量發(fā)送到Pod。通過創(chuàng)建ClusterIP服務,將Pod部署到K3s集群并在集群內(nèi)公開。客戶端無法訪問此服務,但是Ingress Controller可以訪問該服務。Ingress controller執(zhí)行Ingress定義的路由規(guī)則。Ingress controller通過NodePort服務向客戶端公開。



          Kubernetes并不部署Ingress controller,但是K3s會默認部署一個。上圖展示了K3s部署Traefik作為Ingress controller的實現(xiàn)。因此,Traefik將會負責滿足Ingress的請求。Ingress 請求由K3s提交,根據(jù)不同的HTTP屬性實例化傳入流量的路由規(guī)則。


          上圖中描述的Ingress在Traefik上創(chuàng)建了一個路由規(guī)則,這樣傳入的流量如何路徑與“/”后面的內(nèi)容相匹配,就會被重定向到80端口的nginx-svc服務。


          創(chuàng)建K3s Ingress 資源


          以下指南將根據(jù)上一部分的例子來構(gòu)建對應的Ingress配置。


          運行Traefik 儀表盤


          K3s為Ingress controller創(chuàng)建了一個Traefik 部署,但默認情況下,儀表盤是禁用的。在啟用儀表盤的情況下運行Traefik,可以實現(xiàn)應用Ingress創(chuàng)建的路由規(guī)則的概念。


          必須編輯Traefik的ConfigMap才能啟用儀表盤。


          kubectl -n kube-system edit cm traefik


          該命令允許你在終端中編輯ConfigMap:


          # Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file will be# reopened with the relevant failures.#apiVersion: v1data:  traefik.toml: |    # traefik.toml    logLevel = "info"    defaultEntryPoints = ["http","https"]    [entryPoints]      [entryPoints.http]      address = ":80"      compress = true      [entryPoints.https]      address = ":443"      compress = true        [entryPoints.https.tls]          [[entryPoints.https.tls.certificates]]          CertFile = "/ssl/tls.crt"          KeyFile = "/ssl/tls.key"      [entryPoints.prometheus]      address = ":9100"    [ping]    entryPoint = "http"    [kubernetes]      [kubernetes.ingressEndpoint]      publishedService = "kube-system/traefik"    [traefikLog]      format = "json"    [api]      dashboard = true    [metrics]      [metrics.prometheus]        entryPoint = "prometheus"kind: ConfigMapmetadata:  annotations:    meta.helm.sh/release-name: traefik    meta.helm.sh/release-namespace: kube-system  creationTimestamp: "2020-10-02T13:59:32Z"  labels:    app: traefik    app.kubernetes.io/managed-by: Helm    chart: traefik-1.81.0    heritage: Helm    release: traefik  name: traefik  namespace: kube-system  resourceVersion: "3405531"


          必須添加31行和32行才能夠啟用儀表盤。在添加這些行后,鍵入esc + : + wq,保存文件。


          重啟Traefik部署


          kubectl -n kube-system scale deploy traefik --replicas 0kubectl -n kube-system scale deploy traefik --replicas 1


          端口轉(zhuǎn)發(fā)Traefik儀表盤


          kubectl -n kube-system port-forward deployment/traefik 8080


          在你的瀏覽器中,訪問http://localhost:8080,打開儀表盤。


          配置Traefik路由規(guī)則


          我們的例子可以很容易地在不創(chuàng)建yaml文件的情況下完成;然而,yaml文件允許你保存你的工作,并輕松地啟動和拆除整個配置設置。接下來的例子將使用yaml文件而不是命令行命令來構(gòu)建Ingress的Kubernetes資源。


          創(chuàng)建deployment


          必須有一個最終將流量路由到的后備Pod。運行nginx即可。將以下文件另存為deployment.yaml


          apiVersion: apps/v1kind: Deploymentmetadata:  name: nginxspec:  replicas: 1  selector:    matchLabels:      # manage pods with the label app: nginx      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        ports:        - containerPort: 80


          kubectl create -f deployment.yaml


          創(chuàng)建服務


          Ingress在Ingress controller,Traefik上配置路由規(guī)則。Traefik檢查傳入的HTTP流量,并將流量引導到已觸發(fā)規(guī)則的服務,最后從服務流向Pod。現(xiàn)在我們將創(chuàng)建這個Service,將以下文件保存為servcie.yaml


          apiVersion: v1kind: Servicemetadata:  name: nginx-svcspec:  ports:    - name: http      port: 80  selector:    # apply service to any pod with label app: nginx    app: nginx


          kubectl create -f service.yaml


          創(chuàng)建Ingress


          Ingress使用路由規(guī)則配置Traefik。這個示例將使用基于路徑的路由規(guī)則。通過檢查傳入網(wǎng)址的上下文來評估基于路徑的路由規(guī)則。此處,路徑前綴為/。路徑/捕捉所有傳入的流量,所以類似/context1/context2/anything的上下文將會觸發(fā)在Traefik上的路由規(guī)則,因為所有這些上下文的前綴都是/。將以下文件保存為ingress.yaml


          apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: nginx-ingress  annotations:    kubernetes.io/ingress.class: traefikspec:  rules:  - http:      paths:      - path: /        pathType: Prefix        backend:          serviceName: nginx-svc          servicePort: 80


          kubectl?create?-f?ingress.yaml


          路由規(guī)則可以在Traefik的儀表盤上查看:



          使用NodePort暴露Ingress controller到外部流量


          nginx app的Ingress規(guī)則已經(jīng)被定義,但是Traefik尚未被暴露到外部流量。創(chuàng)建Nodeport類型的服務將會暴露Traefik到客戶端。保存以下文件nodeport.yaml


          apiVersion: v1kind: Servicemetadata:  name: traefik  namespace: kube-systemspec:  type: NodePort  ports:    - name: traefik      port: 80      nodePort: 30182      targetPort: 80  selector:    app: traefik


          kubectl create -f nodeport.yaml


          作為外部客戶端


          集群的外部客戶端現(xiàn)在可以向Ingress controller發(fā)出請求。Ingress controller會將流量重定向到nginx-svc服務,而nginx-svc又會將流量導向pod nignx。要作為外部客戶端,我們需要Cluster中的一臺服務器的IP地址。


          kubectl get nodes -o wide


          將任何INTERNAL-IP和我們的Traefik服務的NodePort 30182粘貼到瀏覽器中。將顯示NGINX的默認頁面。請注意,外部客戶端必須與Cluster在同一個網(wǎng)絡上才能工作。



          結(jié)? 論


          Ingress在云原生環(huán)境中是一個極為重要的概念。Kubernetes提供Ingress,但將Ingress controller的實現(xiàn)留給開發(fā)人員。K3s默認提供Traefik作為ingress controller,如果沒有ingress controller,創(chuàng)建Ingress將無濟于事。Ingress controller本身就是一個pod,必須暴露給外部流量。在此示例中,我們使用NodePort進行公開。在評估路由規(guī)則(該規(guī)則通過提交Ingress進行配置)后,命中的Ingress controller流量將重定向到配置的服務。


          附錄


          本指南中的各個文件可以合并為一個文件。通過維護一個文件,很容易創(chuàng)建和銷毀整個Ingress設置,將以下文件另存為nginx-ingres-full.yaml


          創(chuàng)建


          kubectl create -f nginx-ingress-full.yaml


          銷毀


          kubectl delete -f nginx-ingress-full.yaml


          apiVersion: apps/v1kind: Deploymentmetadata:  name: nginxspec:  replicas: 1  selector:    matchLabels:      # manage pods with the label app: nginx      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        ports:        - containerPort: 80---apiVersion: v1kind: Servicemetadata:  name: nginx-svcspec:  ports:    - name: http      port: 80  selector:    # apply service to any pod with label app: nginx    app: nginx---apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: nginx-ingress  annotations:    kubernetes.io/ingress.class: traefikspec:  rules:  - http:      paths:      - path: /        pathType: Prefix        backend:          serviceName: nginx-svc          servicePort: 80---apiVersion: v1kind: Servicemetadata:  name: traefik  namespace: kube-systemspec:  type: NodePort  ports:    - name: traefik      port: 80      nodePort: 30182      targetPort: 80  selector:    app: traefik


          原文鏈接:

          https://levelup.gitconnected.com/a-guide-to-k3s-ingress-using-traefik-with-nodeport-6eb29add0b4b



          推薦閱讀

          在邊緣設備上部署Prometheus,實現(xiàn)遠程監(jiān)控K3s集群!

          保姆級教程!使用k3d實現(xiàn)K3s高可用!

          一文搞定全場景K3s離線安裝



          About k3s


          k3s 是首個進入 CNCF 沙箱項目的 K8S 發(fā)行版,同時也是當前全球用戶量最大的 CNCF 認證輕量級 K8S 發(fā)行版。自2019年3月發(fā)布以來,備受全球開發(fā)者們關(guān)注,至今GitHub Star數(shù)已超過 15,700,成為了開源社區(qū)最受歡迎的邊緣計算 K8S 解決方案。截至目前,K3s全球下載量超過100萬次,每周平均被安裝超過2萬次,其中30%的下載量來自中國。


          k3s 專為在資源有限的環(huán)境中運行 Kubernetes 的研發(fā)和運維人員設計,將滿足日益增長的在邊緣計算環(huán)境中運行在 x86、ARM64 和 ARMv7 處理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的發(fā)布,為開發(fā)者們提供了以“Rancher 2.X + k3s”為核心的從數(shù)據(jù)中心到云到邊到端的 K8S 即服務(Kubernetes-as-a-Service),推動 Kubernetes Everywhere。

          掃碼添加k3s中文社區(qū)助手

          加入官方中文技術(shù)社區(qū)

          官網(wǎng):https://k3s.io

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水多多成人免费视频在线播放 | 经典中文三级在线播放 | 欧美一级操逼 | 免费 无码 国产真人视频九色 | 古典武侠区伊人一区人妻在线 |