无法访问Kubernetes服务-连接被拒绝

时间:2019-12-20 12:30:17

标签: kubernetes yaml kubernetes-service

我正在尝试在Kubernetes集群上运行一个非常基本的应用程序。 它由一个ASP.NET Core WebAPI和一个访问WebAPI的.NET Core控制台应用程序组成。

在控制台应用程序中,我收到错误:“拒绝连接”:

[rro-a@dh-lnx-01 ~]$ sudo kubectl exec -it synchronizer-54b47f496b-lkb67 -n pv2-test -- /bin/bash
root@synchronizer-54b47f496b-lkb67:/app# curl http://svc-coreapi/api/Synchronizations

    curl: (7) Failed to connect to svc-coreapi port 80: Connection refused

root@synchronizer-54b47f496b-lkb67:/app#

以下是我对该服务的YAML:

apiVersion: v1
kind: Service
metadata:
  name: svc-coreapi
  namespace: pv2-test
spec:
  ports:
  -  port: 80
     protocol: TCP
     targetPort: 80
---

WebAPI的YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  creationTimestamp: null
  labels:
     app: pv2
  name: coreapi
  namespace: pv2-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pv2
  strategy: {}
  template:
    metadata:
      annotations:
      creationTimestamp: null
      labels:
        app: pv2
    spec:
      containers:
      - env:
        - name: DBNAME
          value: <DBNAME>
        - name: DBPASS
          value: <PASSWORD>
        - name: DBSERVER
          value: <SQLSERVER>
        - name: DBUSER
          value: <DBUSER>
        image: myrepoapi:latest
        name: coreapi
        ports:
        - containerPort: 80
        resources: {}
      restartPolicy: Always
      imagePullSecrets:
      - name: pv2-repo-cred
status: {}

最有趣的是:当我执行kubectl expose deployment coreapi --type=NodePort --name=svc-coreapi时,它可以工作,但是我不希望WebAPI暴露在外面。 省略--type=NodePort会将类型恢复为ClusterIP,我将再次获得拒绝连接。

谁能告诉我该怎么做才能解决此问题?

1 个答案:

答案 0 :(得分:0)

正如@David Maze所建议的那样,您的ClusterIP服务定义缺少selector字段,该字段负责选择一组用关键字Pods和值{{1}标记的app },例如您的示例:

pv2

您的服务定义可能如下所示,并且应该可以正常工作:

...
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pv2
  strategy: {}
  template:
    metadata:
      annotations:
      creationTimestamp: null
      labels:
        app: pv2
...