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 创建的。
我将我的前端服务公开到端口 84(NodePort 服务)。
现在可以在我机器的浏览器上 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 集群中服务的最简单方法,而无需直接访问节点。
我用kind kubernetes来创建集群。 我已经为 3 Pods(EmberJS、Flask、Postgres)创建了 3 services。 Pods 是使用 Deployment 创建的。
我将我的前端服务公开到端口 84(NodePort 服务)。 现在可以在我机器的浏览器上 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 集群中服务的最简单方法,而无需直接访问节点。