Короткий ответ:
В основном это не вопрос Голанга, это вопрос Kubernetes. Вы должны настроить часть Kubernetes и использовать ее, как когда-либо прежде, в Golang.
Вы можете обратиться к ответу @ blackgreen за простым и временным способом.
Подробности
Kubernetes использует оверлейную сеть, Flannel, в большинстве случаев связь внутри кластера настраивается по умолчанию, и он изолирован снаружи.
Конечно, есть такие проекты, как Calico, которые могут соединять внутреннюю и внешнюю сеть, но это уже другая история.
Есть несколько решений, если мы хотим получить доступ к модулям извне.
kubectl
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
Kubectl использует socat
для создания туннеля и перенаправления одного или нескольких локальных портов на модуль.
Перенаправление портов завершится, когда вы остановите команду, но это хороший выбор, если вы хотите временно получить доступ к модулю для отладки.
kubectl port-forward redis-master-765d459796-258hz 7000:6379
Услуга
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
Service
- это абстрактный способ представить приложение, работающее на наборе модулей, в качестве сетевой службы.
при доступе извне можно использовать разные Service
, NodePort может быть хорошим выбором в большинстве случаев.
Он использует iptables
или ipvs
для создания Port Forward
во всех узлах, пересылающих сеть на целевой порт.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
# By default and for convenience, the `targetPort` is set to the same value as the `port` field.
- port: 80
targetPort: 80
# Optional field
# By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
nodePort: 30007
Ingress
https://kubernetes.io/docs/concepts/services-networking/ingress/ < / а>
Ingress - это прокси-сервер уровня 7, управляющий внешним сетевым доступом к Service
, поскольку gRPC
также построен на основе HTTP/2
, Ingress работает отлично.
Если вы открываете производственное приложение, следует выбрать Ingress.
person
PapEr
schedule
21.03.2021
cluster1.example.com:9000
, но получилi/o timeout
ошибку. Я думаю, это было ожидаемое поведение. Как он узнает, к какому сервису подключается grpc (в кластере k8s огромное количество сервисов)? - person Klimbo   schedule 18.03.2021