开发者社区> 问答> 正文

Kubernetes服务没有按预期工作

我没有在kubernetes上部署postgres(单节点,官方图像),并允许服务通过ClusterIP服务访问postgres。

配置相当简单 - 命名空间,部署,服务:


apiVersion: v1
kind: Namespace
metadata:

name: database

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: database
name: postgres
spec:
replicas: 1
template:

metadata:
  labels:
    app: postgres
spec:
  containers:
    - name: postgres
      image: postgres:11.1
      imagePullPolicy: "IfNotPresent"
      ports:
        - containerPort: 5432

apiVersion: v1
kind: Service
metadata:
name: pg
namespace: database
labels:

app: postgres

spec:
selector:

app: postgres

ports:

  • protocol: TCP
    name: postgres
    port: 5432
    targetPort: 5432
    要测试是执行一个“/ bin / bash”进入pod并运行一个简单的psql命令来测试连接。一切都在当地很好:

kubectl --kubeconfig $k8sconf -n database exec -it $(kubectl --kubeconfig $k8sconf -n database get pods -o jsonpath='{.items[*].metadata.name}') -- psql -U admin postgresdb -c "t"
Tuples only is on.
但是一旦我尝试通过服务访问postgres,命令就会失败:

kubectl --kubeconfig $k8sconf -n database exec -it $(kubectl --kubeconfig $k8sconf -n database get pods -o jsonpath='{.items[*].metadata.name}') -- psql -h pg -U admin postgresdb -c "t"
psql: could not connect to server: Connection timed out

Is the server running on host "pg" (10.245.102.15) and accepting
TCP/IP connections on port 5432?

这是在DigitalOcean单节点集群(1.12.3)上测试的。

Postgres *在正确的端口上监听,pg_hba.conf默认情况下看起来像这样:

...
local all all trust

IPv4 local connections:

host all all 127.0.0.1/32 trust

IPv6 local connections:

host all all ::1/128 trust

Allow replication connections from localhost, by a user with the

replication privilege.

local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host all all all md5
重现看看这个要点

执行via(请使用新的群集并通读):

export k8sconf=/path/to/your/k8s/confic/file
kubectl --kubeconfig $k8sconf apply -f https://gist.githubusercontent.com/sontags/c364751e7f0d8ba1a02a9805efc68db6/raw/01b1808348541d743d6a861402cfba224bee8971/database.yaml
kubectl --kubeconfig $k8sconf -n database exec -it $(kubectl --kubeconfig $k8sconf -n database get pods -o jsonpath='{.items[*].metadata.name}') -- /bin/bash /reproducer/runtest.sh
为什么服务不允许连接或其他测试执行?

展开
收起
k8s小能手 2019-01-11 11:22:47 2990 0
1 条回答
写回答
取消 提交回答
  • 整合最优质的专家资源和技术资料,问答解疑

    没有访问您的群集很难说。这在我的AWS集群上运行良好。有些事情要看:

    kube-proxy是否在所有节点上运行?
    您的网络覆盖/ CNI是否在所有节点上运行?
    只有pg pod才会发生这种情况吗?其他pods怎么样?
    DNS似乎很好,因为pg正在解决10.245.102.15
    您的节点是否允许从Linux端进行IP转发?
    您的数字海洋防火墙规则是否允许来自端口上任何来源的流量5432?请注意,PodCidr和K8s服务IP范围与hostCidr(您的droplets)不同。

    2019-07-17 23:25:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像