zoukankan      html  css  js  c++  java
  • Kubernetes 服务入口管理 Traefik Ingress Controller

    部署 Traefik

    所有的配置文件可以在官方的 github 仓库中找到

    Role Based Access Control configuration (Kubernetes 1.6+ only)

    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
    kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml

    Deploy Traefik using a Deployment or DaemonSet

    DaemonSet 会在每台 Node 节点上都创建 Pod 而 Deployment  是人为控制的副本数量(根据实际需求来取决),这里使用 DaemonSet 类型来部署 Traefik。

    部署 Traefik(修改 hostNetwork: true)

    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
          restartPolicy: Always
          containers:
          - image: traefik
            name: traefik-ingress-lb
            ports:
            - name: http
              containerPort: 80
              hostPort: 80
            - name: admin
              containerPort: 8080
              hostPort: 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
    https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml

    上述由于修改 hostNetwork: true ,其实已经在每个 Node 节点开放了 80 与 8080 端口,80 提供正常服务,8080 是其自带的 UI 界面。

    Ingress 方式暴露 Traefik Web UI

    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: 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.com
        http:
          paths:
          - backend:
              serviceName: traefik-web-ui
              servicePort: 80
    https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/ui.yaml

    下面模拟部署一个程序,已 Nginx  为例:

    vi nginx-deployment.yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      template:
        metadata:
          labels:
            name: nginx-svc
            namespace: default
    spec:
      selector:
        run: nginx-pod
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
    ---
    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: nginx-pod
    spec:
      replicas: 4
      template:
        metadata:
          labels:
            run: nginx-pod
        spec:
          containers:
          - name: nginx
            image: nginx:1.15.5
            ports:
            - containerPort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ngx-ing
      annotations:
        kubernetes.io/ingress.class: traefik
    spec:
      rules:
      - host: k8s.nginx.com
        http:
          paths:
          - backend:
              serviceName: nginx-svc
              servicePort: 80
  • 相关阅读:
    (转载)C#如何在任务管理器中不显示指定的窗体
    Windows上配置Mask R-CNN及运行示例demo.ipynb
    如何选择普通索引和唯一索引?
    relay(跳板机)搭建
    javascript 9x9乘法口诀表
    canvas画布爆炸
    Chrome Network Timing 解释
    JavaScript中对数组的定义
    jquery each 和 map 区别
    css 兼容性转换网站
  • 原文地址:https://www.cnblogs.com/gandefeng/p/10516330.html
Copyright © 2011-2022 走看看