服务无法通信,因为 Kubernetes 中没有 DNS 解析



我使用ClusterIP类型配置服务。我想让他们交流。

服务

apiVersion: v1
kind: Service
metadata:
labels:
app: app-backend-deployment
name: app-backend
spec:
type: ClusterIP
ports:
- port: 8020
protocol: TCP
targetPort: 8100
selector:
app: app-backend

部署

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app-backend
name: app-backend-deployment
spec:
replicas: 1
selector:
matchLabels:
app: app-backend
template:
metadata:
labels:
app: app-backend
spec:
containers:
- name: app-backend
image: app-backend
ports:
- containerPort: 8100
imagePullPolicy: Never

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
name: backend-conf # name of configMap
data:
BACKEND_SERVICE_HOST: app-backend:8020

这就是我传递给前端服务的内容,例如,我想通过DNS名称进行REST调用http://app-backend:8020/get/1.但正如我在控制台中看到的,应用程序无法解析DNS名称net::ERR_NAME_NOT_RESOLVED

我还检查吊舱nslookup:

busybox nslookup app-backend.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53
Name:   app-backend.default.svc.cluster.local
Address: 10.106.41.36

并将其与进行比较

kubectl describe svc app-backend
Name:              app-backend
Namespace:         default
Labels:            app=app-backend-deployment
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
{"...
Selector:          app=app-backend
Type:              ClusterIP
IP:                10.106.41.36
Port:              <unset>  8020/TCP
TargetPort:        8100/TCP

正如你所看到的,Address上有相同的IP,但我不知道在哪里可以找到dns解析程序不起作用的原因。kubectl version Client "v1.15.5", Server Version:"v1.17.3",

由于提供给本地机器的前端服务(Angular就是这样工作的(,REST请求无法通过另一个后端服务的Kubernetes DNS。我需要通过Ingress与他们沟通。由于注释不同,我不得不使用2 Ingress。顺便说一句,有一种更好的方法只使用一个,但当我只想使用一个Ingress时,我找不到一种方法使它们都能使用,具有相同的注释。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: app-backend-ingress
spec:
rules:
- host: app.io
http:
paths:
- path: /api(/|$)(.*)
backend:
serviceName: app-backend
servicePort: 8020
---  
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
name: app-frontend-ingress
spec:
rules:
- host: app.io
http:
paths:
- path: /
backend:
serviceName: app-frontend
servicePort: 80

最新更新