龙竞技官网Kubernetes 1.9集群使用traefik发布服务

2020-02-14 19:36栏目:龙竞技官网
TAG:

在本体系的前两部分中我们介绍了API Server的总体流程,以致API对象如何存款和储蓄到etcd中。在本文中大家将探寻怎么样扩充API财富。

迎接来到深切学习Kubernetes API Server的各类随笔的第二片段。在上一些中我们对APIserver总体,相关术语及request央求流实行商量表明。在本有的文章中,大家任重(rèn zhòngState of Qatar而道远聚集于研究如何对Kubernetes 对象的状态以少年老成种保证,长久的章程举行保管。在此以前的篇章中涉及过API Server自己是无状态的,并且它是独步天下能够与布满式存款和储蓄etcd直接通讯的组件。

Kubernetes 1.9集群使用traefik公布服务

在前文中牵线了在kubernetes 1.5.2集群情状中动用traefik进行劳动公布。Traefik接纳daemonset方式配置,连接api-server走的是http左券,也未配备rbac。本文将介绍在k8s 1.9版本中应用deployment方式安顿traefik来进展服务宣布。

在伊始以前,要求先领会一下哪些是RBAC。RBAC(基于角色的访谈调控)使用 rbac.authorization.k8s.io  API 组来达成权力决定,RBAC 允许管理员通过 Kubernetes API 动态的布局权力攻略。在 1.6 版本中 RBAC 还地处 Beat 阶段,假使想要开启 RBAC 授权格局需求在 apiserver 组件中钦赐 --authorization-mode=RBAC 选项。

在 RBAC API 的八个至关主要概念:
Role:是一应有尽有的权力的聚合,举例多个剧中人物能够分包读取 Pod 的权柄和列出 Pod 的权能
ClusterRole: 跟 Role 形似,可是足以在集群中随处使用( Role 是 namespace 拔尖的)
RoloBinding:把剧中人物映射到客户,进而让那一个客户世袭剧中人物在 namespace 中的权限。
ClusterRoleBinding: 让客户继承 ClusterRole 在漫天集群中的权限。

不难点说RBAC完毕了在k8s集群中对api-server的鉴权,越多的RBAC知识点请查阅官方文书档案:

后生可畏、给集群的节点打上label
因为选用deployment形式计划,所以要给集群的节点打上label,后续选取nodeSelector钦定traefik=proxy,别本数和集群节点数生机勃勃致的时候,全数的节点上都会运作多个pod

# kubectl get nodes --show-labels
# kubectl label  node vm1 traefik=proxy
# kubectl label  node vm2 traefik=proxy
# kubectl get nodes --show-labels

龙竞技官网 1
二、准备yaml文件
1、rbac文件

在一开端的时候,扩张API能源的独一方法是扩展相关API源代码,集成为您所需的财富。大概,带动四个崭新的等级次序为新的中央目的API合入社区代码。不过,那样就会促成基本API能源类型的不停加码,直至API过载。为了防止这种API能源的妄动扩充,在Kubernetes中提供二种扩张亚湾原子核能发电站心API的方法:

etcd的精简表达

# cat traefik-rbac.yaml

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

1.利用自定义资源定义,最最初的时候被称作第三方财富。通过C大切诺基D你能够简单而灵活的格局定义自身的财富对象类型,并让API server管理整个生命周期。

在*nix操作系统中,大家平常采纳/etc来囤积相关配置数据。实际上etcd的名字正是因而发展而来,在etc后边丰富个”d”表示”distributed”布满式。任何布满式系统都亟需有像etcd那样可以存款和储蓄系统数据的事物,使其可以以相像和保证的主意检索有关数据。为了能完成分布式的多少访问,etcd使用Raft 左券。从概念上讲,etcd扶助的数据模型是键值(key-value)存款和储蓄。在etcd2中,各类key是以档次布局存在,而在etcd3中这一个就成为了遍及模型,但同一时间也保持了档期的顺序构造格局的包容性。

      - 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

在启用rbac的条件下,如若鉴权未布署清楚,则traefik pod会报错如下

E0226 00:15:27.729832 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Service: services is forbidden: User "system:serviceaccount:kube-system:default" cannot list services at the cluster scope
E0226 00:15:29.013298 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Endpoints: endpoints is forbidden: User "system:serviceaccount:kube-system:default" cannot list endpoints at the cluster scope
E0226 00:15:29.213354 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Secret: secrets is forbidden: User "system:serviceaccount:kube-system:default" cannot list secrets at the cluster scope
E0226 00:15:29.698574 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1beta1.Ingress: ingresses.extensions is forbidden: User "system:serviceaccount:kube-system:default" cannot list ingresses.extensions at the cluster scope
E0226 00:15:30.411837 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Service: services is forbidden: User "system:serviceaccount:kube-system:default" cannot list services at the cluster scope
E0226 00:15:31.912887 1 reflector.go:199] github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Endpoints: endpoints is forbidden: User "system:serviceaccount:kube-system:default" cannot list endpoints at the cluster scope

龙竞技官网 2

2、traefik的deployment文件

2.接受与主API Servers 并行运营的客商API Servers。这种方法,恐怕越来越多的规划代码开采,大概需求您投入相当多的日子及精力。当然,这种措施也能够让您对API能源有越来越细致,周详的问询。

龙竞技官网 3

# cat traefik-deployment.yaml 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller

在本文中,大家入眼对CENCORED相关定义以致选择举行探究。

利用容器化版本的etcd,我们得以成立上边的树,然后按如下格局检索它:

  namespace: kube-system

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      hostNetwork: true
      nodeSelector:
        traefik: proxy
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: web
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8081
        args:
        - --web
        - --web.address=:8081
        - --kubernetes

3、traefik的service文件

# cat traefik-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - port: 80
targetPort: 8081

4、通过yaml文件创造clusterrole、clusterrolebinding、deployment、serviceaccount、service

# ls
# kubectl create -f traefik-rbac.yaml
# kubectl create -f traefik-deployment.yaml
# kubectl create -f traefik-service.yaml

龙竞技官网 4

# kubectl get pod -n kube-system
# kubectl get svc -n kube-system
# kubectl get svc

龙竞技官网 5
能够观察集群中default namespace中留存二个frontend服务。kube-system namespace中留存nginx-test、traefik-web-ui、kubernetes-dashboard四个服务。大家继续将创制4个ingress
龙竞技官网 6
因此web-ui能够见见在三个节点上各运营了二个pod

三、通过yaml文件创造ingress

 # cat ui.yaml
apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - port: 80

C奥迪Q3Ds的证明及成立

$ docker run --rm -d -p 2379:2379

    targetPort: 8081

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: traefik-ui
    http:
      paths:
      - backend:
          serviceName: traefik-web-ui
          servicePort: 80# cat webui-ing.yaml                 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: k8s.webui
    http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 443# cat redis-ing.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: k8s.frontend
    http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80# cat nginx-ing.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-nginx-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: test.fjhb.cn
    http:
      paths:
      - backend:
          serviceName: nginx-test
          servicePort: 80# kubectl create -f ui.yaml
# kubectl create -f webui-ing.yaml
# kubectl create -f redis-ing.yaml
# kubectl get ingress
# kubectl get ingress -n kube-system

龙竞技官网 7
三、验证
1、通过拜会traefik service对应的nodeport端口,4个ingress配置都加载到了
龙竞技官网 8
2、校订测验机hosts文件,将4个域名的解析分配到两台节点上
龙竞技官网 9
3、浏览器访谈测量检验
龙竞技官网 10
此间现身500漏洞非常多的缘故是,后端的kubernetes-dashboard配置的是https公约
龙竞技官网 11
龙竞技官网 12
龙竞技官网 13
能够在health页面看见http状态码的总结消息
龙竞技官网 14

正文永恒更新链接地址:

1.9集群使用traefik公布服务 在前文中牵线了在kubernetes 1.5.2集群情状中运用traefik实行劳动发布。Traefik采纳daemonset方式布置,连接ap...

在本类别小说第意气风发有的所涉嫌过的,每一个API能源依附Group群组分类,每一种对象都有三个对应的版本号与HTTP路线相关联。未来豆蔻梢头旦想要完成三个C本田CR-VD,首先必要的是就是命名叁个新的API Group群组,那一个API群组无法与已经存在的群组重复。在您和煦新建的API群组中,你能够具备自由数量的财富,并且它们得以与任何群组中的财富具有同等的名号。上边我们来列举五个实在的事例:

--name test-etcd3 quay.io/coreos/etcd:v3.1.0 /usr/local/bin/etcd

龙竞技官网 15

--advertise-client-urls --listen-client-urls

在头里大家有介绍过,每一种版本的由API群组管理的Kubernetes财富是跟HTTP路线相关的。CLX570D肖似于面向对象编制程序中多个类的定义,而实际利用的C瑞鹰能够视作为它的一组实例。首先我们对例子中的一些字段作表明,第风姿洒脱行中的CHighlanderD apiVersion在kube-apiserver 1.7 之后都是这么定义的。从第5行以往大家定义了spec 的有关字段。在第6行spec.group是概念了您创建的CTiggoD的API群组(在本例子中定义为了example.com)。第7行定义了C凯雷德D对象的本子。每一个财富唯有二个固定版本,但在API群组中仍可以够有四个不等版本的能源。第8行的spec.names有四个必填项:kind,依照惯例第三个字母大写,plural,依照常规全为小写,那几个字段与终极生成的HTTP路线相关,比方在本例子中,最后的HTTP路线为https://

$ curl localhost:2379/v2/keys/foo -XPUT -d value="some value"

上边的kind主若是用来说述对象的花色,而resource 财富是与HTTP路线相关的。大好些个景观下那七个是十一分的;但是在有些特定情景下在平等的API HTTP路线下或然回到不通的kind(比如Status 错误对象会回来另豆蔻梢头种kind)。

$ curl localhost:2379/v2/keys/bar/this -XPUT -d value=42

值得注意的是resource 能源(在本例中是databases)和group群组(本例中是example.com)必得与metadata.name 字段相配(本例为第四行databases.example.com)。

$ curl localhost:2379/v2/keys/bar/that -XPUT -d value=take

于今我们依照上边的YAML文件来创设一个C奥迪R8D:

$ http localhost:2379/v2/keys/?recursive=true

$ kubectl create -f databases-crd.yaml

HTTP/1.1 200 OK

customresourcedefinition "databases.example.com" created

Content-Length: 327

鉴于这一个成立进度是异步进行的,所以你必得检查一下你创立的CHighlanderD的情况,确认你创设的CTiguanD未有与任何财富矛盾,何况API Server已经调用相关管理函数完毕创制。你能够在本子或代码中通过轮询达成那几个历程。最终大家能收获以下意况:

Content-Type: application/json

$ kubectl get crd databases.example.com -o yaml

Date: Tue, 06 Jun 2017 12:28:28 GMT

apiVersion: apiextensions.k8s.io/v1beta1

X-Etcd-Cluster-Id: 10e5e39849dab251

kind: CustomResourceDefinition

X-Etcd-Index: 6

metadata:

X-Raft-Index: 7

creationTimestamp: 2017-08-09T09:21:43Z

X-Raft-Term: 2

name: databases.example.com

{

resourceVersion: "792"

"action": "get",

selfLink: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/databases.example.com

"node": {

uid: 28c94a05-7ce4-11e7-888c-42010a9a0fd5

"dir": true,

spec:

"nodes": [

group: example.com

{

names:

"createdIndex": 4,

kind: Database

"key": "/foo",

listKind: DatabaseList

"modifiedIndex": 4,

plural: databases

"value": "some value"

singular: database

},

scope: Namespaced

{

version: v1

"createdIndex": 5,

status:

"dir": true,

acceptedNames:

"key": "/bar",

kind: Database

"modifiedIndex": 5,

listKind: DatabaseList

"nodes": [

plural: databases

{

singular: database

"createdIndex": 5,

conditions:

"key": "/bar/this",

- lastTransitionTime: null

"modifiedIndex": 5,

message: no conflicts found

"value": "42"

reason: NoConflicts

},

status: "True"

{

type: NamesAccepted

"createdIndex": 6,

- lastTransitionTime: 2017-08-09T09:21:43Z

"key": "/bar/that",

message: the initial names have been accepted

"modifiedIndex": 6,

reason: InitialNamesAccepted

"value": "take"

status: "True"

}

type: Established

]

如上,大家能够看见通过kubectl能够看见我们以前创造的CENVISIOND,並且出示出了CCRUISERD的生龙活虎对情景新闻。

}

CRDs的使用

]

在经过kubectl proxy将Kubernetes API开启本地代理后,查看大家刚刚创建的C奥迪Q3D:

}

$ http 127.0.0.1:8001/apis/example.com

}

HTTP/1.1 200 OK

现今大家早就大概了然了etcd是何许做事的,接下去大家后续钻探etcd在Kubernetes是什么被利用的。

Content-Length: 223

集群中的etcd

Content-Type: application/json

在Kubernetes中,etcd是调节平面中的后生可畏耳光独立组成都部队分。在Kubernetes1.5.2版本早前,大家利用的是etcd2本子,而在Kubernetes1.5.2本子之后大家就转向使用etcd3版本了。值得注意的是在Kubernetes1.5.x本子中etcd照旧使用的是v2的API模型,之后那将初叶产生v3的API模型,包括利用的数据模型。站在开垦者角度来讲这几个就像是没什么直接影响,因为API Server与积累在此以前是空虚人机联作,而并不关切后端存款和储蓄的完毕是etcd v2依旧v3。不过假诺是站在集群助理馆员的角度来看,照旧需求领会etcd使用的是哪位版本,因为集群众管理理员供给普通对数码举办一些备份,苏醒的护卫操作。

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:龙竞技官网Kubernetes 1.9集群使用traefik发布服务