调用 Kubernetes 服务失败

Call to Kubernetes service failed

kubernetes 版本:1.5.2
os: 分os 7
etcd 版本:3.4.0

首先,我创建了一个 etcd pod、etcd docker 文件和 etcd pod YAML 文件,如下所示:
etcd docker文件:

FROM alpine

COPY . /usr/bin
WORKDIR /usr/bin

CMD etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379

EXPOSE 2379

pod yaml 文件

apiVersion: v1
kind: Pod
metadata:
  name: etcd
  namespace: storageplatform
  labels:
    app: etcd
spec:
  containers:
    - name: etcd
      image: "karldoenitz/etcd:3.4.0"
      ports:
        - containerPort: 2379
          hostPort: 12379

创建 docker 映像并推送到 dockerhub 后,我 运行 命令 kubectl apply -f etcd.yaml 创建 etcd pod。 etcd pod 的 ip 是 10.254.140.117,我 运行 命令使用 ETCDCTL_API=3 etcdctl --endpoints=175.24.47.64:12379 put 1 1 得到 OK.
我的服务 yaml:

apiVersion: v1
kind: Service
metadata:
  name: storageservice
  namespace: storageplatform
spec:
  type: NodePort
  ports:
    - port: 12379
      targetPort: 12379
      nodePort: 32379
  selector:
    app: etcd

应用 yaml 文件创建 service.run 命令 kubectl get services -n storageplatform,我得到了这些信息。

NAMESPACE         NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
storageplatform   storageservice         10.254.140.117   <nodes>       12379:32379/TCP   51s

毕竟我运行命令

ETCDCTL_API=3 etcdctl --endpoints=10.254.140.117:32379 get 1

ETCDCTL_API=3 etcdctl --endpoints={host-ip}:32379 get 1

我得到了Error: context deadline exceeded

怎么了?如何让服务有用?

您使用服务 name/ip (10.254.140.117 ) 和服务端口 (12379) 定义了一个在 kubernetes 网络内部可用的服务,该服务在 kubernetes 集群的所有节点上可用,甚至在具有节点端口 (32379) 的 kubernetes 网络

您需要修复服务才能映射到正确的容器端口:targetPort 必须匹配 pod containerPort(以及 dockerfile 中的端口)。

如果错误 Error: context deadline exceeded 仍然存在,则表明存在通信问题。这可以在将内部服务 ip 与外部节点端口(您的第一个 get 1)一起使用时进行解释。对于节点端口(您的第二个命令),我假设 etcd pod 不正确 运行,或者端口在节点上被防火墙保护。

更改服务以引用 containerPort 而不是 hostPort

apiVersion: v1
kind: Service
metadata:
  name: storageservice
  namespace: storageplatform
spec:
  type: NodePort
  ports:
    - port: 2379
      targetPort: 2379
      nodePort: 32379
  selector:
    app: etcd