Kubernetes中安装traefik ingress

Kubernetes中安装traefik ingress

# 下载配置清单
wget https://github.com/containous/traefik/tree/v1.7/examples/k8s
# 链接中以traefik-开头的文件有3个,都可以见名知意,其中traefik-deployment.yaml我们这里没有用到
# traefik-deployment.yaml跟traefik-ds.yaml二者选其一即可,由于底下的配置是根据traefik-ds.yaml来的所以建议使用
# ui.yaml 是定义traefik 的dashboard的svc及ingress 这里没有用是因为8080端口直接监听在node上的
下载上面链接中以下两个文件
traefik-rbac.yaml traefik-ds.yaml
# 由于默认通过svc使用NodePort,且端口范围只能是30000-32767,如果kubernetes是编译安装的则可自定义端口范围
# 这里使用的是kubeadm安装的,所以只能使用30000-32767了
# 这里说下为什么使用30000-32767端口范围不方便,主要是因为内部一些项目需要调用其他项目的域名,而域名则是通过
# ingress来发布对外服务的,如果不是80端口的话就需要在 ingress前端再加个nginx或者是流量绕到网关防火墙再回来
# 这样就极其不方便及内部访问耗时
# 所以这里我们需要做的是将 traefik的容器(traefik-ds.yaml这个文件中定义的资源)使用hostNetwork的方式共享主机的网络空间来监听80端口
# 接下来,来修改traefik-ds.yaml中定义的资源清单
vim traefik-ds.yaml
# 在DaemonSet.spec.template.spec 下加入
# ...
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      # 在此添加
      hostNetwork: true
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8080
          # 8080端口是traefik的dashboard,可用于查看一些数据
          # 如果不想使用8080端口 则可修改如下端口为其他任意端口,需要注意的是修改的端口在node上没有监听才可以
          # 这里默认
          hostPort: 8080
# ...
---
# 将此文件中定义的svc的清单全部注释掉,由于我们使用了hostNetwork直接共享了node的网络名称空间,所以这里的svc已经没有必要用了
#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
# end
# 应用配置清单
kubectl apply -f ./
# 应用完成后稍等片刻 可去非master节点上查看本机的80端口及8080端口是否直接监听的
netstat -tnlp | grep 80
tcp6       0      0 :::8080                 :::*                    LISTEN      7499/traefik
tcp6       0      0 :::80                   :::*                    LISTEN      7499/traefik
# 由于我们traefik pod是以DaemonSet控制器运行的,所以每个node上都会监听如上两个端口
# 在生产环境中可在防火墙上将80端口转发至任意一个或多个node上的80端口,以便于对互联网外部的用户访问
# 假设有20个Node,又不想在每个Node上都运行traefik,每个Node都运行一个traefik,这样也不太合理.
# 所以我们可以给某些个节点打上对应的标签,让DaemonSet(deploy等控制器资源也可同样定义)控制器控制的pod只运行在某个或多个Node上
# 然后使用ds.spec.template.spec.nodeSelector 来选择刚才定义的节点标签,即可让DaemonSet控制器资源只运行在定义的节点上
# 配置如下.假设这里有5个node,只让traefik以DameonSet控制器运行在node1,node2这两个节点上
kubectl get node
NAME                STATUS   ROLES    AGE   VERSION
kubernetes-master   Ready    master   37d   v1.13.3
kubernetes-node1    Ready    <none>   37d   v1.13.3
kubernetes-node2    Ready    <none>   37d   v1.13.3
kubernetes-node3    Ready    <none>   37d   v1.13.3
kubernetes-node4    Ready    <none>   37d   v1.13.3
kubernetes-node5    Ready    <none>   37d   v1.13.3
1,打标签,标签根据自己需要定义
kubectl label node kubernetes-node1 node_type=ingress
kubectl label node kubernetes-node2 node_type=ingress

2,修改traefik-ds.yaml配置清单 增加ds.spec.template.spec.nodeSelector配置项
vim traefik-ds.yaml
# ...
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      # 添加在此处
      nodeSelector:
        # 标签名及标签值要与上面定义的标签一致
        node_type: ingress
        # end
      hostNetwork: true
# ...
3,应用修改后的配置清单
kubectl apply -f traefik-ds.yaml

4,验证
# 查看traefik-ds的pod是否只有两个
# 需要明白的是DaemonSet控制器资源默认情况下会在每个node上运行1个,上面我们有5个node,然后我们只给node1 2打了标签,所以只会运行两个pod
kubectl get pod -n kube-system | grep traefik

# 查看是否只在node1,2上监听了80,8080端口
# 由于上面我们修改了pod使用hostNetwork 来共享使用node的网络名称空间 所以会在node监听
# 在node1 2上查看
netstat -tnlp | grep 80

5,防火墙将80端口转发至node1,2这两个主机的IP上即可对外发布服务了
# Ingress资源定义示例
---
apiVersion: examples/v1beata1
kind: Ingress
metadata:
  # ingress名称
  name: ingress-tsp
  namespace: default
  annotations:
    # 表示ingress的类型
    kubernetes.io/ingress.class: traefik
    # 后端应用的根
    traefik.ingress.kubernetes.io/app-root: /tsp
spec:
  rules:
  # 域名
  - host: tsp.xxxxx.com
    http:
      paths:
      # 映射的路径此路径是前端的路径
      - path: /
        backend:
          # 后端pod的service名称
          serviceName: tsp
          # service端口
          servicePort: 8080

更多好文关注马哥linux运维

原文地址:https://blog.51cto.com/ant595/2482946

时间: 2024-08-29 02:32:33

Kubernetes中安装traefik ingress的相关文章

kubernetes集群traefik ingress实现同一命名空间不同微服务模块的访问

背景:kubernetes集群traefik ingress实现同一命名空间不同微服务模块的访问1.安装traefik ingresscat > traefik-ingress.yaml <<EOF kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: traefik-ingress-controllerrules: apiGroups: ""resources: pods se

实操教程丨如何在K8S集群中部署Traefik Ingress Controller

注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给该集群中运行的服务.这与Ingress控制如何将外部流量路由到集群有异曲同工之妙.接下来,我们举一个实际的例子来更清楚的说明Ingress的概念. 首先,想象一下在你的Kubernetes集群中有若干个微服务(小型应用程序之间彼此通信).这些服务能够在集群内部被访问,但我们想让我们的用户从集群外部也

Mesos+Kubernetes集成安装部署

因为Docker本身没有提供集群管理能力,对于docker集群一台台的登陆操作不太现实,因此需要引进容器集群的管理工具,主流的有mesosphere的marathon.谷歌的Kubernetes.docker社区的swarm,目前成熟度最高的是Kubernetes.Kubernetes是Google开源的容器集群管理系统,其提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下: 使用Docker对应用程序包装(package).实例化(

实用干货:Kubernetes中的负载均衡全解

很多企业在部署容器的时候都会选择Kubernetes作为其容器编排系统.这是对Kubernetes的可靠性,灵活性和特性广泛的肯定.在这篇文章中,我们将对Kubernetes如何处理一个非常常见且必要的工作--负载均衡,进行深入的解读.在许多非容器环境(即服务器之间的均衡)中,负载均衡是一个相对简单的任务,但当涉及到容器时,就需要一些其他的.特殊的处理. 管理容器 要理解Kubernetes的负载均衡,首先需要了解Kubernetes是如何组建容器的. 容器通常用来执行特定的服务或者一组服务,因

如何在Kubernetes中管理有状态应用

在Kubernetes中,StatefulSet被用来管理有状态应用的API对象.StatefulSets在Kubernetes 1.9版本才稳定.StatefulSet管理Pod部署和扩容,并为这些Pod提供顺序和唯一性的保证.与Deployment相似的地方是,StatefulSet基于spec规格管理Pod:与Deployment不同的地方是,StatefulSet需要维护每一个Pod的唯一身份标识.这些Pod基于同样的spec创建,但互相之间不能替换,每一个Pod都保留自己的持久化标识.

traefik Ingress https配置

环境 . kubernetes 1.14.3 . traefik V1.7.12 .IP 192.168.30.35 .kubectl label nodes ingress ingress=yes https证书申请 推荐使用acme.sh 申请免费证书,具体方法不做详细介绍使用自签证书 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=*.mddgame.co

同一k8s集群中多nginx ingress controller

同一k8s集群中多nginx ingress controller同一k8s集群中,若有多个项目(对应多个namespace)共用一个nginx ingress controller,因此任意注册到ingress的服务有变更都会导致controller配置重载,当更新频率越来越高时,此controller压力会越来越大,理想的解决方案就是每个namespace对应一个nginx ingress controller,各司其职. NGINX ingress controller提供了ingress

openshift 4.3中安装helm3并通过helm方式部署应用

openshift 4.3中安装helm3并通过helm方式部署应用 简介 Helm是一个命令行界面(CLI)工具,可简化将应用程序和服务部署到OpenShift Container Platform集群的过程. Helm使用一种称为chart的包格式. Helm chart 是描述OpenShift容器平台资源的文件集. 在openshift中部署Helm,我们可以获得以下效益: 充分利用k8s helm部署大量ocp operator hub没有的应用,比如gitlab新版本就只支持helm

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. PS: 篇幅有点长,但是比较详细.比较全面 一.Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server.kubelet等等)需要相互通信的端口