Как настроить балансировщик нагрузки GKE для tcp-сервера golang? - PullRequest
0 голосов
/ 03 мая 2019

После развертывания контейнера сервера golang и балансировщика нагрузки gke я могу успешно подключиться к внешнему ip балансировщика нагрузки, но данные не достигают контейнера сервера.

Это работает, как и ожидалось, когда я запускаю контейнер сервера локально и указываю клиенту на localhost. Я изменил его для обслуживания запросов HTTP, и он работал нормально с теми же манифестами kubernetes. Тем не менее, если я пытаюсь обслуживать как tcp, так и http (на разных портах), то не работает ни на на gke, но опять же работает локально. Поэтому я подозреваю, что это, вероятно, связано с тем, как я настроил балансировщик нагрузки или как я слушаю tcp соединения на сервере, что-то ломается при работе на gke, но не локально.

Сервисный манифест K8s

apiVersion: v1
kind: Service
metadata:
  name: steel-server-service
spec:
  type: LoadBalancer
  selector:
    app: steel-server
  ports:
  - protocol: TCP
    name: tcp
    port: 12345
    targetPort: 12345

Манифест развертывания K8s

apiVersion: apps/v1
kind: Deployment
metadata:
  name: steel-server-deployment
  labels:
    app: steel-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: steel-server
  template:
    metadata:
      labels:
        app: steel-server
    spec:
      containers:
      - name: steel-server
        image: gcr.io/<my-project-id>/steel-server:latest
        ports:
        - containerPort: 12345
          name: tcp

Восстановить код Go TCP Server

server, err := net.Listen("tcp", ":12345")
if err != nil {
    log.Fatalln("Couldn't start up tcp server: ", err)
}

1 Ответ

0 голосов
/ 03 мая 2019

Можете ли вы сначала попробовать с kubectl get svc, чтобы узнать, какие порты открыты с балансировщиком нагрузки, поскольку вы получили внешний ip от GCP как type:loadbalancer.

apiVersion: v1
kind: Service
metadata:
  name: steel-server-service
spec:
  type: LoadBalancer
  selector:
    app: steel-server
  ports:
  - protocol: TCP
    name: tcp
    port: 80
    targetPort: 12345

Попробуйте с помощью этой конфигурации службы изменить порт на 80, в то время как целевой порт совпадает с портом контейнера.

...