kubernets Traefik 的HTTP 和HTTPS

k8s 的ingress+traefik原理細(xì)說(shuō)

ingress 本質(zhì)上就是一個(gè)nginx或者traefik 代理俩檬。 他將用戶的請(qǐng)求該域名的請(qǐng)求轉(zhuǎn)發(fā)到后端的service豁辉。

做LB 實(shí)際上是kubernets的Service踢匣。

部署原理

daemonset 方式部署 traffic或者nginx,讓其監(jiān)聽在80端口和443端口樟蠕,默認(rèn)是隨機(jī)端口,通過hostport可以指定端口

K8S 中必須 Create Role Based Access 蛋疼稠腊,

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
rules:
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:
- kind: ServiceAccount
  name: traefik-ingress-controller
  namespace: kube-system

daemonset 例子

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        args:
        - --web
        - --kubernetes
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 8080
      name: admin
  type: NodePort

創(chuàng)建DaemonSet

Kubectl create -f ds.yaml

kubectl --namespace=kube-system get pods

NAME                                         READY     STATUS    RESTARTS   AGE
kube-addon-manager-minikubevm                1/1       Running   0          4h
kubernetes-dashboard-s8krj                   1/1       Running   0          4h
traefik-ingress-controller-678226159-eqseo   1/1       Running   0          7m

構(gòu)建UI

apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - port: 80
    targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: traefik-ui.minikube
    http:
      paths:
      - backend:
          serviceName: traefik-web-ui
          servicePort: 80
轉(zhuǎn)發(fā)規(guī)則
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
 name: stilton
 labels:
   app: cheese
   cheese: stilton
spec:
 replicas: 2
 selector:
   matchLabels:
     app: cheese
     task: stilton
 template:
   metadata:
     labels:
       app: cheese
       task: stilton
       version: v0.0.1
   spec:
     containers:
     - name: cheese
       image: errm/cheese:stilton
       ports:
       - containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
 name: cheddar
 labels:
   app: cheese
   cheese: cheddar
spec:
 replicas: 2
 selector:
   matchLabels:
     app: cheese
     task: cheddar
 template:
   metadata:
     labels:
       app: cheese
       task: cheddar
       version: v0.0.1
   spec:
     containers:
     - name: cheese
       image: errm/cheese:cheddar
       ports:
       - containerPort: 80
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
 name: wensleydale
 labels:
   app: cheese
   cheese: wensleydale
spec:
 replicas: 2
 selector:
   matchLabels:
     app: cheese
     task: wensleydale
 template:
   metadata:
     labels:
       app: cheese
       task: wensleydale
       version: v0.0.1
   spec:
     containers:
     - name: cheese
       image: errm/cheese:wensleydale
       ports:
       - containerPort: 80

基于https

沿用上文 的Role Based Access(RBAC)

首先得厘清幾個(gè)概念

  • Secret, 保存密鑰文件东跪, 我們這次把pem畸陡,key等文件通過這種方式傳入pod 內(nèi)

    # 創(chuàng)建一個(gè)名為 ak-cert secret文件
    kubectl create secret generic mjb-cert --from-file=/server.pem --from-file=server.key
    

    ?

  • ConfigMap,配置文件鹰溜,創(chuàng)建一個(gè)配置文件,和secret一樣, 通過volumes方式掛載到容器內(nèi)

    cat traefik.toml 
    defaultEntryPoints = ["http","https"]
    [entryPoints]
      [entryPoints.http]
      address = ":80"
        [entryPoints.http.redirect]
          entryPoint = "https"
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
          [[entryPoints.https.tls.certificates]]
          CertFile = "/mjb/server.pem"
          KeyFile = "/mjb/server.key"
    

    ?

  • 掛載方法

    
    #定義volumes
    volumes:
          - name: mjb
            secret:
              secretName: ak-cert
          - name: config
            configMap:
              name: traefik-conf
          containers:
          - image: traefik
            name: traefik-ingress-lb
            ## 掛載
            volumeMounts:
            - mountPath: "/mjb"
              name: "mjb"
            - mountPath: "/config"
              name: "config"
    
  • 部署daemonset

    [root@master https]# cat dae.yaml
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: traefik-ingress-controller
      namespace: kube-system
    ---
    kind: DaemonSet
    apiVersion: extensions/v1beta1
    metadata:
      name: traefik-ingress-controller
      namespace: kube-system
      labels:
        k8s-app: traefik-ingress-lb
    spec:
      template:
        metadata:
          labels:
            k8s-app: traefik-ingress-lb
            name: traefik-ingress-lb
        spec:
          serviceAccountName: traefik-ingress-controller
          terminationGracePeriodSeconds: 60
          volumes:
          - name: mjb
            secret:
              secretName: mjb-cert
          - name: config
            configMap:
              name: traefik-conf
          containers:
          - image: traefik
            name: traefik-ingress-lb
            volumeMounts:
            - mountPath: "/mjb"
              name: "mjb"
            - mountPath: "/config"
              name: "config"
            ports:
            - name: web
              containerPort: 80
              hostPort: 80
            - name: https
              containerPort: 443
              hostPort: 443
            - name: admin
              containerPort: 8580
            args:
            - --web
            - --kubernetes
            - --web.address=:8580
            - --configfile=/config/traefik.toml
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: traefik
      namespace: kube-system
    spec:
      selector:
        k8s-app: traefik-ingress-lb
      ports:
      - protocol: TCP
        port: 80
        name: http
      - protocol: TCP
        port: 443
        name: https
      - protocol: TCP
        port: 8580
        name: admin
      type: NodePort
    

    ?

  • 部署基于https的UI

    apiVersion: v1
    kind: Service
    metadata:
      name: traefik-web-ui
      namespace: kube-system
    spec:
      selector:
        k8s-app: traefik-ingress-lb
      ports:
      - port: 80
        targetPort: 8580
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: traefik-web-ui
      namespace: kube-system
      annotations:
        kubernetes.io/ingress.class: traefik
    spec:
      tls:
        - secretName: traefik-cert
      rules:
      - host: ui.domain.com
        http:
          paths:
          - backend:
              serviceName: traefik-web-ui
              servicePort: 80
    

    訪問測(cè)試 ui.domain.com, 對(duì)了上文的證書需自己準(zhǔn)備丁恭,如果沒有可以生成

openssl req -newkey rsa:2048 -nodes -keyout domain.com.key  -x509 -days 365 -out domain.com.crt
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曹动,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牲览,更是在濱河造成了極大的恐慌墓陈,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件第献,死亡現(xiàn)場(chǎng)離奇詭異贡必,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庸毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門仔拟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人飒赃,你說(shuō)我怎么就攤上這事理逊。” “怎么了盒揉?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)兑徘。 經(jīng)常有香客問我刚盈,道長(zhǎng),這世上最難降的妖魔是什么挂脑? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任藕漱,我火速辦了婚禮,結(jié)果婚禮上崭闲,老公的妹妹穿的比我還像新娘肋联。我一直安慰自己,他們只是感情好刁俭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布橄仍。 她就那樣靜靜地躺著,像睡著了一般牍戚。 火紅的嫁衣襯著肌膚如雪侮繁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天如孝,我揣著相機(jī)與錄音宪哩,去河邊找鬼。 笑死第晰,一個(gè)胖子當(dāng)著我的面吹牛锁孟,可吹牛的內(nèi)容都是我干的彬祖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼品抽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼储笑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起桑包,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤南蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哑了,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赘方,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年弱左,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窄陡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拆火,死狀恐怖跳夭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情们镜,我是刑警寧澤币叹,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站模狭,受9級(jí)特大地震影響颈抚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嚼鹉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一贩汉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锚赤,春花似錦匹舞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至酒贬,卻和暖如春又憨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锭吨。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工蠢莺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人零如。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓躏将,卻偏偏與公主長(zhǎng)得像锄弱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祸憋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理会宪,服務(wù)發(fā)現(xiàn),斷路器蚯窥,智...
    卡卡羅2017閱讀 134,626評(píng)論 18 139
  • 版權(quán)聲明:原創(chuàng)作品掸鹅,謝絕轉(zhuǎn)載!否則將追究法律責(zé)任拦赠。 前言 最近中國(guó)和印度的局勢(shì)也是愈演愈烈巍沙。作為一個(gè)愛國(guó)青年我有些...
    李偉銘MIng閱讀 2,055評(píng)論 0 5
  • 安裝k8s Master高可用集群 主機(jī) 角色 組件 172.18.6.101 K8S Master Kubele...
    jony456123閱讀 8,044評(píng)論 0 9
  • 現(xiàn)在應(yīng)該把游記整理一下了。 在大二的那一年荷鼠,我做了個(gè)決定句携,來(lái)一場(chǎng)說(shuō)走就走的旅行,下定這個(gè)決定很艱難允乐,也很堅(jiān)決矮嫉。讀萬(wàn)...
    陌上柳閱讀 336評(píng)論 0 0
  • 青春是一支不會(huì)回頭的箭,后悔是沒有用的牍疏,所以唯一能做的就是下次遇到了好的蠢笋、對(duì)的,別犯同樣的錯(cuò)誤鳞陨,別同樣矯情犯賤就好...
    陌如上閱讀 180評(píng)論 0 1