0

Service我正在尝试使用and资源将外部 Postgres 框映射到我的 Kubernetes 集群中,Endpoint但该服务未检测到端点。

terraform $ kubectl describe services postgres -n infrastructure
Name:              postgres
Namespace:         infrastructure
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.222.4.128
Port:              postgres  5432/TCP
TargetPort:        5432/TCP
Endpoints:         
Session Affinity:  None
Events:            <none>

服务和端点是通过以下方式创建的:

kind: Service
apiVersion: v1
metadata:
 name: postgres
 namespace: infrastructure
spec:
 type: ClusterIP
 ports:
 - port: 5432
   targetPort: 5432
----
kind: Endpoints
apiVersion: v1
metadata:
 name: postgres
 namespace: infrastructure
subsets:
 - addresses:
     - ip: "10.0.0.1"
   ports:
     - port: 5432

如果我使用实例的 IP,但不能使用 Kubernetes 服务名称(postgres.infrastructure.svc.cluster.local.)

4

1 回答 1

0

我只是直接复制了您的清单文件并应用于我的集群,没有任何正在运行的 pod,并且我得到了一个端点(与您的不同):

kubectl describe svc/postgres -n infrastructure
Name:              postgres
Namespace:         infrastructure
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"postgres","namespace":"infrastructure"},"spec":{"ports":[{"port":...
Selector:          <none>
Type:              ClusterIP
IP:                10.109.74.181
Port:              <unset>  5432/TCP
TargetPort:        5432/TCP
Endpoints:         10.0.0.1:5432
Session Affinity:  None
Events:            <none>

如果您上面的“端点”字段为空,则说明有问题,您无法通过主机名连接也就不足为奇了。

同样,主机名查找在集群上的 pod 内工作

$ kubectl run --rm '--restart=Never' '--image-pull-policy=IfNotPresent' -i -t '--image=alpine' tmp-29399
# apk-add install --no-cache bind-tools
[output omitted]
# dig +short postgres.infrastructure.svc.cluster.local.
10.109.74.181

我怀疑你的服务有问题。您可以运行kubectl describe svc/postgres -n infrastructure(如果存在,请查看最后的事件部分)以查看从资源service同步是否有任何问题。endpoint

还请指定您在哪里运行。这是GKE吗?

于 2019-02-15T23:47:24.780 回答