После развертывания контейнера сервера 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)
}