Как подключиться к GKE postgresql svc в GCP?

#google-cloud-platform #google-kubernetes-engine

#google-cloud-platform #google-kubernetes-engine

Вопрос:

Я пытаюсь подключиться к службе postgresql (pod) в моем развертывании kubernetes, но мой GCP не предоставляет порт (поэтому я не могу использовать что-то вроде: $ psql -h localhost -U postgresadmin1 —password -p 31070 postgresdb для подключения к Postgresql и просмотра моей базы данных).

Я использую балансировщик нагрузки в своем сервисе:

 
@cloudshell:~ (academic-veld-230622)$ psql -h 35.239.52.68 -U jhipsterpress --password -p 30728 jhipsterpress-postgresql
Password for user jhipsterpress:
psql: could not connect to server: Connection timed out
        Is the server running on host "35.239.52.68" and accepting
        TCP/IP connections on port 30728?

apiVersion: v1
kind: Service
metadata:
  name: jhipsterpress
  namespace: default
  labels:
    app: jhipsterpress
spec:
  selector:
    app: jhipsterpress
  type: LoadBalancer
  ports:
  - name: http
    port: 8080



NAME                                            READY     STATUS    RESTARTS   AGE
pod/jhipsterpress-84886f5cdf-mpwgb              1/1       Running   0          31m
pod/jhipsterpress-postgresql-5956df9557-fg8cn   1/1       Running   0          31m

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
service/jhipsterpress              LoadBalancer   10.11.243.22   35.184.135.134   8080:32670/TCP   31m
service/jhipsterpress-postgresql   LoadBalancer   10.11.255.64   35.239.52.68     5432:30728/TCP   31m
service/kubernetes                 ClusterIP      10.11.240.1    <none>           443/TCP          35m

NAME                                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jhipsterpress              1         1         1            1           31m
deployment.apps/jhipsterpress-postgresql   1         1         1            1           31m

NAME                                                  DESIRED   CURRENT   READY     AGE
replicaset.apps/jhipsterpress-84886f5cdf              1         1         1         31m
replicaset.apps/jhipsterpress-postgresql-5956df9557   1         1         1         31m


@cloudshell:~ (academic-veld-230622)$ kubectl describe pod jhipsterpress-postgresql
Name:               jhipsterpress-postgresql-5956df9557-fg8cn
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               gke-standard-cluster-1-default-pool-bf9f446d-9hsq/10.128.0.58
Start Time:         Sat, 06 Apr 2019 13:39:08  0200
Labels:             app=jhipsterpress-postgresql
                    pod-template-hash=1512895113
Annotations:        kubernetes.io/limit-ranger=LimitRanger plugin set: cpu request for container postgres
Status:             Running
IP:                 10.8.0.14
Controlled By:      ReplicaSet/jhipsterpress-postgresql-5956df9557
Containers:
  postgres:
    Container ID:   docker://55475d369c63da4d9bdc208e9d43c457f74845846fb4914c88c286ff96d0e45a
    Image:          postgres:10.4
    Image ID:       docker-pullable://postgres@sha256:9625c2fb34986a49cbf2f5aa225d8eb07346f89f7312f7c0ea19d82c3829fdaa
    Port:           5432/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 06 Apr 2019 13:39:29  0200
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:  100m
    Environment:
      POSTGRES_USER:      jhipsterpress
      POSTGRES_PASSWORD:  <set to the key 'postgres-password' in secret 'jhipsterpress-postgresql'>  Optional: false
    Mounts:
      /var/lib/pgsql/data from data (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mlmm5 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  data:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  spingular-bucket
    ReadOnly:   false
  default-token-mlmm5:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-mlmm5
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason                  Age                From                                                        Message
  ----     ------                  ----               ----                                                        -------
  Warning  FailedScheduling        33m (x3 over 33m)  default-scheduler                                           persistentvolumeclaim "spingular-bucket" not found
  Warning  FailedScheduling        33m (x3 over 33m)  default-scheduler                                           pod has unbound immediate PersistentVolumeClaims
  Normal   Scheduled               33m                default-scheduler                                           Successfully assigned default/jhipsterpress-postgresql-5956df9557-fg8cn to gke-standard-cluster-1-default-pool-bf9f446d-9hsq
  Normal   SuccessfulAttachVolume  33m                attachdetach-controller                                     AttachVolume.Attach succeeded for volume "pvc-95ba1737-5860-11e9-ae59-42010a8000a8"
  Normal   Pulling                 33m                kubelet, gke-standard-cluster-1-default-pool-bf9f446d-9hsq  pulling image "postgres:10.4"
  Normal   Pulled                  32m                kubelet, gke-standard-cluster-1-default-pool-bf9f446d-9hsq  Successfully pulled image "postgres:10.4"
  Normal   Created                 32m                kubelet, gke-standard-cluster-1-default-pool-bf9f446d-9hsq  Created container
  Normal   Started                 32m                kubelet, gke-standard-cluster-1-default-pool-bf9f446d-9hsq  Started container

  

С открытым брандмауэром: posgresql-jhipster
Вход
Применимо ко всем
Диапазоны IP: 0.0.0.0 / 0
tcp:30728
Разрешить
999
по умолчанию

Спасибо за вашу помощь. Любая документация действительно ценится.

Ответ №1:

В настоящее время ваш сервис имеет тип ClusterIP. Это не предоставляет доступ к сервису или модулям вне кластера. Вы не можете подключиться к pod из облачной оболочки таким образом, поскольку облачной оболочки нет на вашем VPC, и модули не доступны.

Обновите свой сервис с помощью kubectlредактировать svc jhipsterpress-postgresql Измените поле spec.type на ‘LoadBalancer’

После этого у вас будет внешний IP, к которому вы сможете подключиться

Комментарии:

1. Большое спасибо, Патрик, но я все еще не могу подключиться из сеанса облачной оболочки, даже если у меня есть служба / jhipsterpress-postgresql LoadBalancer 10.3.248.6 35.237.47.246 5432: 31375 / TCP 17h, но в нем говорится, что psql: не удалось подключиться к серверу: Время ожидания соединения истекло Сервер работает на хосте «35.237.47.246» и принимает соединения TCP / IP через порт 31375? Должен ли я открывать порт для внешнего доступа или что-то еще? Еще раз спасибо за ответ!

2. Поскольку служба балансировки нагрузки должна подключаться по внешнему IP, служба должна перенаправить ваш запрос на правильный порт узла. порт 31375 — это порт узла, на котором предоставляется доступ к сервису, поэтому вы могли бы выполнить [NodeIP: 31375] из облачной оболочки, но для этого вам нужно открыть брандмауэр.

3. Вместо этого, можете ли вы обновить свой kubectlописание вывода svc в вопросе?

4. Спасибо Патрику. Я все повторил и обновил вопрос всеми данными. Я также открыл брандмауэр, но результат тот же.

5. таким образом, правилом брандмауэра фактически будет порт 8080, поскольку это порт, к которому вы пытаетесь подключиться. С помощью TCP LB узлы теперь прослушивают 35.184.135.134:8080