kind kubernetes:Nodeport Service(前端)服务无法从浏览器访问 ClusterIP(后端)服务

kind kubernetes : Nodeport Service ( front-end ) service is not able to access ClusterIP ( back- end ) service from browser

我用kind kubernetes来创建集群。 我已经为 3 Pods(EmberJS、Flask、Postgres)创建了 3 services。 Pods 是使用 Deployment 创建的。

将我的前端服务公开到端口 84NodePort 服务)。 现在可以在我机器的浏览器上 localhost:84 访问我的应用程序。

但是该应用无法连接到暴露为 flask-dataapp-service:6003 的烧瓶 API。

net:: ERR_NAME_NOT_RESOLVED

我的烧瓶服务可用 flask-dataapp-service:6003。当我做一个

curl flask-dataapp-service:6003

在 ember pod 容器bash 内。正在解决没有任何问题。

但是浏览器没有解析 flask-dataapp-service。

在下面找到配置文件。


种类-custom.yaml

> kind: Cluster 
> apiVersion: kind.x-k8s.io/v1alpha4  nodes:
> - role: control-plane   
> extraPortMappings:
>   - containerPort: 30000
>     hostPort: 84
>     listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
>     protocol: tcp

Emberapp.yaml

apiVersion: v1
kind: Service
metadata:
  name: ember-dataapp-service
spec:
  selector:
    app: ember-dataapp
  ports:
  - protocol: "TCP"
    port: 4200
    nodePort: 30000
  type: NodePort

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ember-dataapp
spec:
  selector:
    matchLabels:
      app: ember-dataapp
  replicas: 1
  template:
    metadata:
      labels:
        app: ember-dataapp
    spec:
      containers:
      - name: emberdataapp
        image: emberdataapp
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 4200

flaskapp.yaml

apiVersion: v1
kind: Service
metadata:
  name: flask-dataapp-service
spec:
  selector:
    app: flask-dataapp
  ports:
  - protocol: "TCP"
    port: 6003
    targetPort: 1234
  type: ClusterIP

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-dataapp
spec:
  selector:
    matchLabels:
      app: flask-dataapp
  replicas: 1
  template:
    metadata:
      labels:
        app: flask-dataapp
    spec:
      containers:
      - name: dataapp
        image: dataapp
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 1234

my flask service is available as flask-dataapp-service:6003. When I do a

curl flask-dataapp-service:6003

inside the bash of the ember pod container. It is being resolved without any issues.

Kubernetes 有一个 in-cluster DNS,它允许在集群内直接解析诸如此类的名称(即 DNS 请求不会离开集群)。这也是此名称无法在集群外解析的原因(因此您无法在浏览器中看到它)

(无关旁注:这实际上是 Kubernetes CKA 认证中的一个陷阱)

由于您使用了 NodePort 服务,理论上您应该能够使用您描述的 NodePort (6003) 并使用“http://localhost:6003”访问应用程序

或者,您可以 port-forward:

kubectl port-forward svc/flask-dataapp-service 6003:6003

然后使用相同的 link

当 运行 本地 kubernetes 集群时,port-forward 选项并没有多大用处(事实上,kubectl 可能会因“端口正在使用”而失败),这是一个好主意习惯了这种方法,因为这是访问使用 ClusterIP 或 NodePort 的远程 kubernetes 集群中服务的最简单方法,而无需直接访问节点。