#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