Ingress controller之traefik2在k8s上安裝使用

本次文章的traefik以v2.0.2版本為例。

架構(gòu)介紹

安裝之前我們先簡(jiǎn)單了解traefik的基本原理


image.png

Traefik是Edge路由器,它攔截并路由每個(gè)傳入的請(qǐng)求:它了解確定哪些服務(wù)處理哪些請(qǐng)求的所有邏輯和規(guī)則(比如path,header,host等等)。傳統(tǒng)上,邊緣路由器(或反向代理)需要一個(gè)配置文件绽乔,配置包含需要你事先配置好的所有可能路由看疗,比如nginx就是這樣做的去枷,而Traefik則從服務(wù)本身獲取它們,通過(guò)支持自動(dòng)發(fā)現(xiàn)來(lái)做的特咆,并且服務(wù)發(fā)現(xiàn)天然支持k8s啥繁,consul等。

安裝

traefik支持多種安裝方式蚕钦,比如直接的二進(jìn)制包安裝,docker安裝整袁,rancher安裝炸客,k8s安裝。本次我們把traefik直接安裝在k8s上面众弓。采用是k8s的CRD方式暴匠。

廢話不多說(shuō),讓我們開(kāi)始吧:

  1. 準(zhǔn)備RBAC 權(quán)限和CRD(CustomResourceDefinition)
    新建文件:01-crd.yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutes.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRoute
    plural: ingressroutes
    singular: ingressroute
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutetcps.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRouteTCP
    plural: ingressroutetcps
    singular: ingressroutetcp
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: middlewares.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: Middleware
    plural: middlewares
    singular: middleware
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: tlsoptions.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: TLSOption
    plural: tlsoptions
    singular: tlsoption
  scope: Namespaced

---
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
  - apiGroups:
      - extensions
    resources:
      - ingresses/status
    verbs:
      - update
  - apiGroups:
      - traefik.containo.us
    resources:
      - middlewares
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - traefik.containo.us
    resources:
      - ingressroutes
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - traefik.containo.us
    resources:
      - ingressroutetcps
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - traefik.containo.us
    resources:
      - tlsoptions
    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: default
  1. Service定義
    新建文件 02-svc.yaml,注意service采用nodeport方式傻粘,這個(gè)三個(gè)端口不能被占用每窖,可以按需要修改端口
apiVersion: v1
kind: Service
metadata:
  name: traefik

spec:
  type: NodePort
  ports:
    - protocol: TCP
      name: web
      port: 8000
    - protocol: TCP
      name: admin
      port: 8080
    - protocol: TCP
      name: websecure
      port: 4443
  selector:
    app: traefik
  1. 部署文件定義
    新建03-deploy.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: default
  name: traefik-ingress-controller

---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: default
  name: traefik
  labels:
    app: traefik

spec:
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik-ingress-controller
      containers:
        - name: traefik
          image: traefik:v2.0.2
          args:
            - --api.insecure
            - --accesslog
            - --entrypoints.web.Address=:8000
            - --entrypoints.websecure.Address=:4443
            - --providers.kubernetescrd
            - --certificatesresolvers.default.acme.tlschallenge
            - --certificatesresolvers.default.acme.email=foo@you.com
            - --certificatesresolvers.default.acme.storage=acme.json
            # Please note that this is the staging Let's Encrypt server.
            # Once you get things working, you should remove that whole line altogether.
            - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
          ports:
            - name: web
              containerPort: 8000
            - name: websecure
              containerPort: 4443
            - name: admin
              containerPort: 8080
  1. 執(zhí)行kubectl命令安裝
    在對(duì)于的有kubectl權(quán)限的k8s節(jié)點(diǎn)上執(zhí)行安裝命令
kubectl apply -f 01-crd.yaml
kubectl apply -f 02-svc.yaml
kubectl apply -f 03-deploy.yaml

正確安裝后,打開(kāi)安裝的節(jié)點(diǎn)ip弦悉,以本機(jī)為例:http://127.0.0.1:8080
就可以看到管理界面了:


image.png
  1. 安裝whoami服務(wù)進(jìn)行驗(yàn)證
    新建文件 whoaim.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: whoami

spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
  selector:
    app: whoami
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: default
  name: whoami
  labels:
    app: whoami

spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: containous/whoami
          ports:
            - name: web
              containerPort: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: simpleingressroute
  namespace: default
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`192.168.0.200`) && PathPrefix(`/notls`)
    kind: Rule
    services:
    - name: whoami
      port: 80

通過(guò)crd定義的IngressRoute 資源來(lái)對(duì)whoaim進(jìn)行配置窒典,routes里面host配置traefik支持直接用對(duì)應(yīng)的節(jié)點(diǎn)ip,當(dāng)然用域名也可以稽莉,想nginx ingress只能用域名在測(cè)試環(huán)境就比較麻煩瀑志。
在traefik管理界面看到注冊(cè)成功:


image.png

服務(wù)詳情如下:


image.png

通過(guò)地址進(jìn)行訪問(wèn)whoami,正常訪問(wèn)污秆。到此traefik在k8s安裝成功劈猪。當(dāng)然還有中間件還沒(méi)有介紹,下篇我們?cè)僖?jiàn)良拼。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末战得,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子庸推,更是在濱河造成了極大的恐慌常侦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬媒,死亡現(xiàn)場(chǎng)離奇詭異聋亡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)际乘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門坡倔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事致讥〗銎停” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵垢袱,是天一觀的道長(zhǎng)墓拜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)请契,這世上最難降的妖魔是什么咳榜? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮爽锥,結(jié)果婚禮上涌韩,老公的妹妹穿的比我還像新娘。我一直安慰自己氯夷,他們只是感情好臣樱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著腮考,像睡著了一般雇毫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踩蔚,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天棚放,我揣著相機(jī)與錄音,去河邊找鬼馅闽。 笑死飘蚯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的福也。 我是一名探鬼主播局骤,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暴凑!你這毒婦竟也來(lái)了庄涡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搬设,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后撕捍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拿穴,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年忧风,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了默色。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狮腿,死狀恐怖腿宰,靈堂內(nèi)的尸體忽然破棺而出呕诉,到底是詐尸還是另有隱情,我是刑警寧澤吃度,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布甩挫,位于F島的核電站,受9級(jí)特大地震影響椿每,放射性物質(zhì)發(fā)生泄漏伊者。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一间护、第九天 我趴在偏房一處隱蔽的房頂上張望亦渗。 院中可真熱鬧,春花似錦汁尺、人聲如沸法精。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搂蜓。三九已至,卻和暖如春苞也,著一層夾襖步出監(jiān)牢的瞬間洛勉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工如迟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留收毫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓殷勘,卻偏偏與公主長(zhǎng)得像此再,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玲销,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • k8s容器編排 [TOC] 1:k8s集群的安裝 1.1 k8s的架構(gòu) 除了核心組件输拇,還有一些推薦的Add-ons...
    Zh_bd92閱讀 902評(píng)論 0 0
  • 1. 組件版本和配置策略 組件版本: Kubernetes 1.10.4 Docker 18.03.1-ce Et...
    Anson前行閱讀 5,756評(píng)論 0 11
  • k8s的架構(gòu) kubernetes集群核心組件 k8s集群的安裝 官方文檔 環(huán)境準(zhǔn)備 做一些基礎(chǔ)的優(yōu)化后拍攝快照并...
    酷酷的偉閱讀 1,974評(píng)論 0 15
  • 小結(jié): //導(dǎo)航欄顏色 [[UINavigationBar appearance] setBarTintColor...
    Im_周胖閱讀 2,287評(píng)論 1 6
  • 白色的醫(yī)療艙中正躺著一位黑發(fā)少年,閉著眼睛贤斜,渾身上下貼著各式各樣的檢測(cè)儀器策吠,床邊的機(jī)械手臂正在有條不紊地沖著手里的...
    暄duai閱讀 418評(píng)論 0 4