首页 > 解决方案 > 未转发 tcp 服务的 Kubernetes haproxy 负载均衡器

问题描述

我目前正在尝试使用 kubernetes 自动扩展我的 tcp 服务。我没有使用云基础设施(amazon、aws..etc),所以我使用 haproxy 进行负载平衡。我的 tcp 服务不是 http 协议,所以我用 --configmap-tcp-services 参数添加了我的服务。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: prokittest
    spec:
      replicas: 1
      selector:
        matchLabels:
            app: prokit-server-label
      template:
        metadata:
          labels:
            app: prokit-server-label
        spec:
          volumes:
          - name: host-volume
            hostPath: 
              path: /cosmo/
              type: DirectoryOrCreate
          containers:
          - name: flask-web-server
            image: jakgon/app:2.2
            securityContext:
              privileged: true
            volumeMounts:
            - name: host-volume
              mountPath: /node/plugins
            env:
            - name: POD_HOSTNAME
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: SERVER_GROUP
              value: "lobby"
            - name: MAX_PLAYER
              value: "100"
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            ports:
            - name: server-port
              containerPort: 25565
            - name: healthz-checker
              containerPort: 8088
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: prokittest
      annotations:
        haproxy.org/send-proxy-protocol: proxy-v2
        haproxy.org/load-balance: "leastconn"
        haproxy.org/check: "true"
        haproxy.org/check-interval: "10s"
      labels:
        run: prokittest
        app: service-monitor-label
    spec:
      selector:
        app: prokit-server-label
      ports:
      - name: server-port
        port: 25565
      - name: healthz-checker
        port: 8088
        targetPort: 8088
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: blog-service-monitor
      labels:
        release: prometheus-operator
    spec:
      selector:
        matchLabels:
            app: service-monitor-label
      endpoints:
      - port: healthz-checker

以下是我的 configmap-tcp-services 配置图

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: default
data:
  9000: "cosmoage/prokittest:25565"

在此应用后,haproxy.cfg 会在服务 pod 调整大小时自动更改。但是,如果没有手动端口转发,我将无法访问 haproxy 服务器,如下所示:

kubectl port-forward [[ingress pod name]] 9000:9000 --address 0.0.0.0

我对 haproxy ConfigMap 有误解吗?入口 pod 名称不固定,因此使用端口转发不是一个好主意。

标签: dockerkubernetesyamlhaproxy

解决方案


推荐阅读