0

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

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

但是该应用程序无法连接到作为flask-dataapp-service:6003公开的烧瓶 API 。

净::ERR_NAME_NOT_RESOLVED

我的烧瓶服务以flask-dataapp-service:6003 的形式提供。当我做一个

curl flask-dataapp-service:6003

在ember pod 容器的bash 中。它正在解决,没有任何问题。

但是从浏览器来看,flask-dataapp-service 没有得到解决。

在下面找到配置文件。


kind-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

烧瓶应用程序.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
4

1 回答 1

0

我的烧瓶服务可用作烧瓶数据应用服务:6003。当我做一个

curl flask-dataapp-service:6003

在 ember pod 容器的 bash 中。它正在解决,没有任何问题。

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

(不相关的旁注:这实际上是 Kubernetes CKA 认证中的一个问题)

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

或者,您可以端口转发:

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

然后使用相同的链接

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

于 2022-02-03T12:31:34.160 回答