【问题标题】:Can't ping postgres pod from another pod in kubernetes无法从 kubernetes 中的另一个 pod ping postgres pod
【发布时间】:2019-06-05 07:04:59
【问题描述】:

我创建了一个繁忙的 pod 来通过以下 yaml 测试数据库连接

pod.yaml

kind: Pod
apiVersion: v1
metadata:
  name: marks-dummy-pod
spec:
  containers:
    - name: marks-dummy-pod
      image: djtijare/ubuntuping:v1
      command: ["/bin/bash", "-ec", "while :; do echo '.'; sleep 5 ; done"]
  restartPolicy: Never

使用的 Dockerfile :-

FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash

我将服务创建为

postgresservice.yaml

kind: Service
apiVersion: v1
metadata:
 name: postgressvc
spec:
 type: ClusterIP
 ports:
 - port: 5432
   targetPort: 5432

创建服务的端点

kind: Endpoints
apiVersion: v1
metadata:
 name: postgressvc
subsets:
 - addresses:
     - ip: 172.31.6.149
   ports:
     - port: 5432

然后我在 pod (kubectl exec -it mark-dummy-pod bash) 内运行 ping 172.31.6.149 但不工作。(ping localhost 工作)

kubectl get pods,svc,ep -o wide的输出

NAME                                       READY   STATUS    RESTARTS   AGE     IP             NODE              NOMINATED NODE   READINESS GATES
pod/marks-dummy-pod                        1/1     Running   0          43m     192.168.1.63   ip-172-31-11-87   <none>           <none>


NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/postgressvc        ClusterIP   10.107.58.81     <none>        5432/TCP         33m     <none>


NAME                         ENDPOINTS           AGE
endpoints/postgressvc        172.31.6.149:5432   32m

P Ekambaram 的回答输出

kubectl get pods,svc,ep -o wide 给出

NAME                            READY   STATUS    RESTARTS   AGE    IP             NODE              NOMINATED NODE   READINESS GATES
pod/postgres-855696996d-w6h6c   1/1     Running   0          44s    192.168.1.66   ip-172-31-11-87   <none>           <none>


NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE    SELECTOR
service/postgres        NodePort    10.110.203.204   <none>        5432:31076/TCP   44s    app=postgres



 NAME                      ENDPOINTS           AGE
endpoints/postgres        192.168.1.66:5432   44s

【问题讨论】:

  • 嗨,你收到什么样的错误信息?你能跑kubectl get pods,svc,ep
  • 命令 ping 172.31.6.149 挂起时没有错误消息,然后我执行 ctlr + c 给出 100% 数据包丢失
  • 我在上面添加了 kubectl get pods,svc,ep 的输出..请检查
  • 对不起,你能用这个推荐的结果更新问题吗kubectl get pods,svc,ep -o wide它将提供更多信息
  • 完成 ..i 添加了 kubectl get pods,svc,ep -o wide 的输出

标签: kubernetes kubernetes-pod


【解决方案1】:

所以问题出在我在 namespace=kube-system 中的 DNS pod 中

我只是创建新的 kubernetes 设置并确保 DNS 正常工作

对于新设置,请参阅我对另一个问题的回答

How to start kubelet service??

【讨论】:

    【解决方案2】:

    postgres pod 不见了?

    您是创建端点对象还是自动生成的?

    共享 pod 定义 YAML

    您不应该创建端点。这是错误的。遵循以下 postgres 部署。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: postgres-config
      labels:
        app: postgres
    data:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: example
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: postgres
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: postgres
        spec:
          containers:
            - name: postgres
              image: postgres:11
              imagePullPolicy: Always
              ports:
                - containerPort: 5432
              envFrom:
                - configMapRef:
                    name: postgres-config
              volumeMounts:
                - mountPath: /var/lib/postgresql/data
                  name: postgres-data
          volumes:
            - name: postgres-data
              emptyDir:
    ---       
    apiVersion: v1
    kind: Service
    metadata:
      name: postgres
      labels:
        app: postgres
    spec:
      type: NodePort
      ports:
       - port: 5432
      selector:
       app: postgres
    

    取消部署 postgres 服务和端点并部署上述 YAML。 它应该工作

    为什么 NODE ip 以 ip- 为前缀

    【讨论】:

    • 我已经共享了名为 pod.yaml 的文件...我创建了端点对象,因为所有 yaml 文件都添加了问题
    • 那么我应该使用什么 ip 从我的 marks-dummy-pod pod ping 到这个数据库?
    • kubectl 获取 pods,svc,ep -o wide
    • 分享输出
    • 我为你添加了输出回答
    【解决方案3】:

    您应该为您的数据库创建部署,然后创建一个针对此部署的服务,然后使用此服务 ping,为什么要使用 ip ping?

    【讨论】:

    • 我试过了......但现在我认为问题出在我的 kube-dns pod
    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2021-06-19
    • 2017-05-15
    • 2019-04-24
    • 2020-12-24
    • 2019-05-03
    相关资源
    最近更新 更多