一:前言
1. 到目前为止 Kubernetes 暴露服务的有三种方式,分别为 LoadBlancer Service、NodePort Service、Ingress。官网对 Ingress 的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是它定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴漏。 Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,终止SSL,提供基于域名访问的虚拟主机等等
LoadBlancer Service:LoadBlancer Service 是 Kubernetes 结合云平台的组件,如国外 GCE、AWS、国内阿里云等等,使用它向底层云平台申请创建负载均衡器来实现,有局限性,对于使用云平台的集群比较方便。
NodePort Service: NodePort Service 是通过在节点上暴漏端口,然后通过将端口映射到具体某个服务上来实现服务暴漏,比较直观方便,但是对于集群来说,随着 Service 的不断增加,需要的端口越来越多,很容易出现端口冲突,而且不容易管理。当然对于小规模的集群服务,还是比较不错的。
Ingress: Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等。
2.traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现
二:yaml文件
可以通过 https://github.com/containous/traefik/tree/master/examples/k8s 下载 所需要的yaml文件; 我们使用了如下几个文件:
traefik-rbac.yaml
traefik-ds.yaml
ui.yaml
my-ingress.yaml (这里我们对集群中的
elasticsearch和kibana开启了Ingress
)
三:部署与验证
1.创建资源 kubectl create -f .
2. 通过kubectl logs -f 确认pod正常启动
3. traefik dashboard
4. 如果需要在kubernetes集群以外访问就需要设置DNS,或者修改本机的hosts文件。然后通过Igress配置中的host 直接访问service.
1. 到目前为止 Kubernetes 暴露服务的有三种方式,分别为 LoadBlancer Service、NodePort Service、Ingress。官网对 Ingress 的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是它定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴漏。 Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,终止SSL,提供基于域名访问的虚拟主机等等
LoadBlancer Service:LoadBlancer Service 是 Kubernetes 结合云平台的组件,如国外 GCE、AWS、国内阿里云等等,使用它向底层云平台申请创建负载均衡器来实现,有局限性,对于使用云平台的集群比较方便。
NodePort Service: NodePort Service 是通过在节点上暴漏端口,然后通过将端口映射到具体某个服务上来实现服务暴漏,比较直观方便,但是对于集群来说,随着 Service 的不断增加,需要的端口越来越多,很容易出现端口冲突,而且不容易管理。当然对于小规模的集群服务,还是比较不错的。
Ingress: Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等。
2.traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现
二:yaml文件
可以通过 https://github.com/containous/traefik/tree/master/examples/k8s 下载 所需要的yaml文件; 我们使用了如下几个文件:
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
- - 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
点击(此处)折叠或打开
- ---
- 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
- hostNetwork: true
- containers:
- - image: traefik
- name: traefik-ingress-lb
- ports:
- - name: http
- containerPort: 80
- hostPort: 80
- - name: admin
- containerPort: 8080
- securityContext:
- capabilities:
- drop:
- - ALL
- add:
- - NET_BIND_SERVICE
- args:
- - --api
- - --kubernetes
- - --logLevel=INFO
- ---
- 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
点击(此处)折叠或打开
- apiVersion: v1
- kind: Service
- metadata:
- name: traefik-web-ui
- namespace: kube-system
- spec:
- selector:
- k8s-app: traefik-ingress-lb
- ports:
- - name: web
- port: 80
- targetPort: 8580
- ---
- apiVersion: extensions/v1beta1
- kind: Ingress
- metadata:
- name: traefik-web-ui
- namespace: kube-system
- spec:
- rules:
- - host: traefik-ui.local
- http:
- paths:
- - path: /
- backend:
- serviceName: traefik-web-ui
- servicePort: web
点击(此处)折叠或打开
- apiVersion: extensions/v1beta1
- kind: Ingress
- metadata:
- name: traefik-ingress
- namespace: kube-system
- spec:
- rules:
- - host: elasticsearch.donkey
- http:
- paths:
- - path: /
- backend:
- serviceName: elasticsearch-logging
- servicePort: 9200
- - host: kibana.donkey
- http:
- paths:
- - path: /
- backend:
- serviceName: kibana-logging
- servicePort: 5601
三:部署与验证
1.创建资源 kubectl create -f .
2. 通过kubectl logs -f 确认pod正常启动
3. traefik dashboard
4. 如果需要在kubernetes集群以外访问就需要设置DNS,或者修改本机的hosts文件。然后通过Igress配置中的host 直接访问service.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2152650/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28624388/viewspace-2152650/