zoukankan      html  css  js  c++  java
  • traefik的80和443端口占用进一步分析

    上一篇文章地址:https://www.cnblogs.com/sanduzxcvbnm/p/14990065.html

    建议先看上一篇文章,才更容易理解这篇

    1.traefik的deployment.yaml文件分析

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: traefik-v2
      namespace: kube-system
      labels:
        app: traefik-v2
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: traefik-v2
      template:
        metadata:
          labels:
            app: traefik-v2
        spec:
          serviceAccountName: traefik-ingress-controller
          terminationGracePeriodSeconds: 1
          containers:
            - name: traefik-v2
              image: traefik:v2.3
              args:
                - --configfile=/config/traefik.yaml
              ports:
                - name: web
                  containerPort: 80
                  hostPort: 80           #hostPort方式,将端口暴露到集群节点
                - name: websecure
                  containerPort: 443
                  hostPort: 443          #hostPort方式,将端口暴露到集群节点
                - name: admin
                  containerPort: 8090
                - name: tcpep
                  containerPort: 8000
                - name: udpep
                  containerPort: 9000
              resources:
                limits:
                  cpu: 500m
                  memory: 1024Mi
                requests:
                  cpu: 300m
                  memory: 1024Mi
              securityContext:
                capabilities:              ## 只开放网络权限    
                  drop:
                    - ALL
                  add:
                    - NET_BIND_SERVICE
              volumeMounts:
              - mountPath: "/config"
                name: "config"
              - mountPath: /etc/traefik/logs
                name: logdir
              - mountPath: /etc/localtime
                name: timezone
                readOnly: true
          volumes:
            - name: config
              configMap:
                name: traefik-config 
            - name: logdir
              hostPath:
                path: /data/traefik/logs
                type: "DirectoryOrCreate"
            - name: timezone
              hostPath:
                path: /etc/localtime
                type: File
          tolerations:            
            - operator: "Exists"        ## 设置容忍所有污点,防止节点被设置污点
          hostNetwork: true             ## 开启host网络,提高网络入口的网络性能
          nodeSelector:                 ## 设置node筛选器,在特定label的节点上启动
            IngressProxy: "traefik2.3"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: traefik-v2
      namespace: kube-system
    spec:
      type: LoadBalancer
      selector:
        app: traefik-v2
      ports:
        - protocol: TCP
          port: 80
          name: web
          targetPort: 80
        - protocol: TCP
          port: 443
          name: websecure
          targetPort: 443
        - protocol: TCP
          port: 8090
          name: admin
          targetPort: 8090
        - protocol: TCP
          port: 8000
          name: tcpep
          targetPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: traefikudp-v2
      namespace: kube-system
    spec:
      type: LoadBalancer
      selector:
        app: traefik-v2
      ports:
        - protocol: UDP
          port: 9000
          name: udpep
          targetPort: 9000
    


    如上这个图片,副本数是2,使用的docker镜像是traefik:v2.3,并且要占用主机的分布的pod所在主机的端口

    注意:占用的端口是2个副本数的pod调度到哪个主机上就占用哪个主机的这些端口,并不是占用k8s集群全部主机的端口(若是副本数正好是集群主机数,那就是所有主机的这些端口了)

    比如,k8s集群有三个节点,master1,worker1,worker2,若是俩pod被调度到worker1和worker2主机上,则占用的是这俩主机的几个端口,具体看下面的,master1主机上则查不到如下这个

    # ss -tulnp|grep 80
    tcp    LISTEN     0      128    [::]:80                 [::]:*                   users:(("traefik",pid=5201,fd=9))
    tcp    LISTEN     0      128    [::]:8082               [::]:*                   users:(("traefik",pid=5201,fd=11)))
    tcp    LISTEN     0      128    [::]:8090               [::]:*                   users:(("traefik",pid=5201,fd=8)))
    tcp    LISTEN     0      128    [::]:8000               [::]:*                   users:(("traefik",pid=5201,fd=7))
    

    如上这个图片,表示的是pod要被调度到有这个标签的主机上。

    结合以上分析,可以给某个主机添加这个标签,然后修改pod副本数为1,这样就能把pod调度到指定的主机上,然后修改本机hosts文件添加dns解析,方便测试web访问。

    若是不这样操作的话,会出现如下情况:
    比如,k8s集群有三个节点,master1,worker1,worker2,这三个主机都添加主机标签了。pod副本数为1,域名解析到master1
    如果pod被调度到worker1或worker2,则域名解析的网址无法访问,必须得有pod调度到master1上才可以。
    

    正式环境中可以则可以多给几个主机添加这个标签,然后pod副本数等于有这个标签的主机数,然后域名解析的话使用其中一个主机公网ip就可以了。

    再进一步安全使用,解析到全站CDN,CDN再到SLB,SLB再负载均衡到有这个标签的主机,这样就进一步实现安全和高可用了。

  • 相关阅读:
    VS2005中Ajax控件作用说明
    DevExpress 2.0 GridControl 使用方法
    主机信息
    sql2005中运用一条sql语句完成数据导出到Excel中
    跟我学做c#皮肤美化
    (转)QT事件传递与事件过滤器
    (转)主成分分析(Principal components analysis)最大方差解释
    这是填充首页的
    (转)C++中extern “C”含义深层探索
    (转)如何配置Qt使用VS2010进行开发
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/14990261.html
Copyright © 2011-2022 走看看