Kubernetes 为我的部署分配了什么主机?
What host does Kubernetes assign to my deployment?
我有两个Kubernetes部署:composite-app
(1个pod)和product-app
(2个pods),都监听8080端口,第一个需要调用第二个有时。
但是,第一个部署找不到第二个。当它尝试使用 product.app
主机调用它时失败:
Exception: I/O error on GET request for "http://product-app:8080/product/123": product-app;
nested exception is UnknownHostException
我使用的主机是否正确?到目前为止,我已经尝试过(无济于事):
product
product-app.default.pod.cluster.local
product-app
这是我的 YAML:
apiVersion: v1
kind: Service
metadata:
name: composite-service
spec:
type: NodePort
selector:
app: composite-app
ports:
- targetPort: 8080
port: 8080
nodePort: 30091
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: composite-deploy
spec:
replicas: 1
selector:
matchLabels:
app: composite-app
template:
metadata:
labels:
app: composite-app
spec:
containers:
- name: composite-container
image: 192.168.49.2:2376/composite-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-deploy
spec:
replicas: 2
selector:
matchLabels:
app: product-app
template:
metadata:
labels:
app: product-app
spec:
containers:
- name: product-container
image: 192.168.49.2:2376/product-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
您需要为 product-deploy
Deployment
定义一个 Service
对象,以便其他 pod 能够连接到它。 Service
如果不需要对外暴露,可以是ClusterIP
类型
apiVersion: v1
kind: Service
metadata:
name: product-service
spec:
type: ClusterIP
selector:
app: product-app
ports:
- targetPort: 8080
port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-deploy
spec:
replicas: 2
selector:
matchLabels:
app: product-app
template:
metadata:
labels:
app: product-app
spec:
containers:
- name: product-container
image: 192.168.49.2:2376/product-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
您可以在没有服务的情况下使用 pod 的 IP 连接到其他 pod。但是,不建议这样做,因为 pod 的 IP 可以在 pod 更新时更改。
然后您可以使用 product-service
从 composite-app
连接到 product-app
pod。
我有两个Kubernetes部署:composite-app
(1个pod)和product-app
(2个pods),都监听8080端口,第一个需要调用第二个有时。
但是,第一个部署找不到第二个。当它尝试使用 product.app
主机调用它时失败:
Exception: I/O error on GET request for "http://product-app:8080/product/123": product-app; nested exception is UnknownHostException
我使用的主机是否正确?到目前为止,我已经尝试过(无济于事):
product
product-app.default.pod.cluster.local
product-app
这是我的 YAML:
apiVersion: v1
kind: Service
metadata:
name: composite-service
spec:
type: NodePort
selector:
app: composite-app
ports:
- targetPort: 8080
port: 8080
nodePort: 30091
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: composite-deploy
spec:
replicas: 1
selector:
matchLabels:
app: composite-app
template:
metadata:
labels:
app: composite-app
spec:
containers:
- name: composite-container
image: 192.168.49.2:2376/composite-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-deploy
spec:
replicas: 2
selector:
matchLabels:
app: product-app
template:
metadata:
labels:
app: product-app
spec:
containers:
- name: product-container
image: 192.168.49.2:2376/product-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
您需要为 product-deploy
Deployment
定义一个 Service
对象,以便其他 pod 能够连接到它。 Service
如果不需要对外暴露,可以是ClusterIP
类型
apiVersion: v1
kind: Service
metadata:
name: product-service
spec:
type: ClusterIP
selector:
app: product-app
ports:
- targetPort: 8080
port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-deploy
spec:
replicas: 2
selector:
matchLabels:
app: product-app
template:
metadata:
labels:
app: product-app
spec:
containers:
- name: product-container
image: 192.168.49.2:2376/product-ms:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
您可以在没有服务的情况下使用 pod 的 IP 连接到其他 pod。但是,不建议这样做,因为 pod 的 IP 可以在 pod 更新时更改。
然后您可以使用 product-service
从 composite-app
连接到 product-app
pod。