我正在尝试使用Service
和Endpoint
资源将外部Postgres框映射到我的Kubernetes集群中,但是该服务未检测到端点。
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.)
答案 0 :(得分: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吗?