• k8s使用traefik暴露http服务和tcp服务


    traefik官网:Traefik Proxy Documentation - Traefik

    1、下载chart包

    helm repo add traefik https://helm.traefik.io/traefik
    helm repo update
    helm pull traefik/traefik

    2、下载镜像

    docker pull docker.io/library/traefik:2.8

    3、修改values.yaml

    3.1、几个重要的端口配置

    将traefik、web、websecure、metrics下的expose都改为true。

    1. ports:
    2. traefik:
    3. port: 9000
    4. expose: false
    5. # The exposed port for this service
    6. exposedPort: 9000
    7. # The port protocol (TCP/UDP)
    8. protocol: TCP
    9. web:
    10. port: 8000
    11. # hostPort: 8000
    12. expose: true
    13. exposedPort: 80
    14. # The port protocol (TCP/UDP)
    15. protocol: TCP
    16. websecure:
    17. port: 8443
    18. # hostPort: 8443
    19. expose: true
    20. exposedPort: 443
    21. # The port protocol (TCP/UDP)
    22. protocol: TCP
    23. tls:
    24. enabled: false
    25. # this is the name of a TLSOption definition
    26. options: ""
    27. certResolver: ""
    28. domains: []
    29. # - main: example.com
    30. # sans:
    31. # - foo.example.com
    32. # - bar.example.com
    33. metrics:
    34. port: 9100
    35. # hostPort: 9100
    36. expose: false
    37. # The exposed port for this service
    38. exposedPort: 9100
    39. # The port protocol (TCP/UDP)
    40. protocol: TCP
    41. tlsOptions: {}

    3.2、service配置:

    配置使用何种方式将traefik的相关服务暴露出去,使得在集群外可以访问,我这里使用NodePort暴露。

    1. # Options for the main traefik service, where the entrypoints traffic comes
    2. # from.
    3. service:
    4. enabled: true
    5. type: NodePort
    6. # Additional annotations applied to both TCP and UDP services (e.g. for cloud provider specific config)
    7. annotations: {}
    8. # Additional annotations for TCP service only
    9. annotationsTCP: {}
    10. # Additional annotations for UDP service only
    11. annotationsUDP: {}
    12. # Additional service labels (e.g. for filtering Service by custom labels)
    13. labels: {}
    14. # Additional entries here will be added to the service spec.
    15. # Cannot contain type, selector or ports entries.
    16. spec: {}
    17. # externalTrafficPolicy: Cluster
    18. # loadBalancerIP: "1.2.3.4"
    19. # clusterIP: "2.3.4.5"
    20. loadBalancerSourceRanges: []
    21. # - 192.168.0.1/32
    22. # - 172.16.0.0/16
    23. externalIPs: []

    3.3、使用hostNetwork

    必须将hostNetwork的值设为true。

    hostNetwork: true

    3.4、配置traefik ingressClass

    我这里将ingressClass设为mytraefik(建议将ingressClass的值设为和部署实例名称一样)。

    1. providers:
    2. kubernetesIngress:
    3. enabled: true
    4. allowExternalNameServices: false
    5. allowEmptyServices: false
    6. ingressClass: mytraefik

    3.5、 添加自定义端口

    在traefik中,暴露TCP服务需要在部署traefik时定义好需要使用的端口,不同于nginx-ingress可以动态修改TCP端口,traefik不支持动态增加TCP端口。

    这里,我配置了两个端口:32000和32001,这两个端口的别名分别为myport32000和myport32001如果需要使用traefik暴露TCP服务,我就可以使用这两个端口。

    1. additionalArguments:
    2. - --entrypoints.myport32000.Address=:32000
    3. - --entrypoints.myport32001.Address=:32001

    3.6、允许使用80端口

    1. ecurityContext:
    2. capabilities:
    3. drop: [ALL]
    4. add: [NET_BIND_SERVICE] # 开放绑定端口
    5. readOnlyRootFilesystem: true
    6. runAsGroup: 0
    7. runAsNonRoot: false
    8. runAsUser:

    4、部署traefik

    改好参数后,就可以直接部署traefik了。

    helm install mytraefik .

    5、访问traefik

    部署完成后,查看创建的service

    使用浏览器访问traefik的dashboard(9000端口对应的服务就是dashboard)

    1. # 千万注意,这个地址不能错。必须是 服务器ip:NodePort端口/dashboard/#/
    2. http://10.10.101.140:30332/dashboard/#/

    6、使用traefik暴露http服务

    6.1:创建ingress

    traefik暴露HTTP服务和nginx ingress的方式是一样的,就是创建一个Ingress资源,在annotations中指定tkubernetes.io/ingress.class为mytraefik(在步骤3.4中配置的)。

    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. annotations:
    5. kubernetes.io/ingress.class: mytraefik
    6. name: es-log-elasticsearch-http-ehcth3
    7. namespace: zeus-test
    8. spec:
    9. rules:
    10. - host: hces.hclyl.com
    11. http:
    12. paths:
    13. - backend:
    14. serviceName: es-log-kibana
    15. servicePort: 5200
    16. path: /

    6、使用traefik暴露tcp服务

    6.1 创建ingressroutetcp

    match的值都默认为: HostSNI('*')

    entryPoints: entryPoints的值即为步骤3.5中配置的端口别名,我这里使用myport32000。

    1. apiVersion: traefik.containo.us/v1alpha1
    2. kind: IngressRouteTCP
    3. metadata:
    4. name: mysql
    5. namespace: zeus-test
    6. spec:
    7. entryPoints:
    8. - myport32000
    9. routes:
    10. - match: HostSNI(`*`)
    11. services:
    12. - name: test-mysql
    13. port: 3306

    创建完ingressroutetcp cr后,就可以使用32000端口访问mysql服务了。

  • 相关阅读:
    MFC Windows 程序设计[123]之文件浏览编辑框
    单片机开发——宠物自动饮水器方案
    面试题:集群高并发环境下如何保证分布式唯一全局ID生成?
    C#邮件发送
    【Python】10 自动选课
    DDIO和DMA有什么区别
    基于Python实现的图形绘制系统
    数据中心的能耗焦虑, 到底有没有最优解?
    精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践
    flask搭建一个简易服务
  • 原文地址:https://blog.csdn.net/LONG_Yi_1994/article/details/126492064