我是一位有用的助手,可以为您翻译文本。
我正在尝试在minikube安装中使用k8s运行两个服务。 因此,我有
以下是
当我使用minikube IP和公开的服务端口访问
然而,我可以使用minikube IP和暴露的端口访问bar-server/endpoint,像这样:http://192.168.99.100:31168/endpoint。
所以看起来我可以从集群外部访问Foo和Bar服务。但是,Foo服务无法解析Bar服务主机并且无法访问它。
UPD:以下是一些故障排除细节。
- 在minikube上启用了kube-dns插件。 - 尝试从Foo pod内部wget到Bar服务端点。我能够通过bar-server的IP地址做到这一点,但不能使用bar-server:8081/endpoint。 - 尝试nslookup kubernetes.default.svc.cluster.local localhost看起来很好。这里是输出: Server: 127.0.0.1 Address 1: 127.0.0.1 localhost - 另外dns pod查找并运行。这里是kubectl get pods -n=kube-system | grep -i dns的输出: kube-dns-6777479f6b-vxd7m 3/3 Running 9 1d
我正在尝试在minikube安装中使用k8s运行两个服务。 因此,我有
Foo
和Bar
服务,当我访问Foo
服务时,它必须触发Bar
服务以获取数据。以下是
Foo
服务的部署配置:foo-deployment.yaml
:apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: foo-server
labels:
app: foo-server
spec:
replicas: 1
template:
metadata:
labels:
app: foo-server
serving: "true"
spec:
containers:
- name: foo-server
image: foo-container
env:
- name: BAR_SERVICE_URL
value: http://bar-server:8081
ports:
- containerPort: 8080
name: http
foo-svc.yaml
:
apiVersion: v1
kind: Service
metadata:
name: foo-server
labels:
app: foo-server
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
name: http
selector:
app: foo-server
serving: "true"
BAR_SERVICE_URL
环境变量被用在Foo
中,以便服务能够知道Bar
的主机名。
下面是Bar
服务的配置文件
bar-svc.yaml
:
apiVersion: v1
kind: Service
metadata:
name: bar-server
labels:
app: bar-server
spec:
type: NodePort
ports:
- port: 8081
targetPort: 8081
name: http
selector:
app: bar-server
bar-deployment.yaml
:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: bar-server-v1
labels:
app: bar-server
version: "1.0"
spec:
replicas: 2
template:
metadata:
labels:
app: bar-server
version: "1.0"
serving: "true"
spec:
containers:
- name: bar-server
image: bar-container
ports:
- containerPort: 8081
name: http
当我使用minikube IP和公开的服务端口访问
Foo
服务时,我会在Pod日志中收到以下错误:2018-02-08 14:32:25.875 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://bar-server:8081/endpoint": bar-server; nested exception is java.net.UnknownHostException: bar-server] with root cause
java.net.UnknownHostException: bar-server
然而,我可以使用minikube IP和暴露的端口访问bar-server/endpoint,像这样:http://192.168.99.100:31168/endpoint。
所以看起来我可以从集群外部访问Foo和Bar服务。但是,Foo服务无法解析Bar服务主机并且无法访问它。
UPD:以下是一些故障排除细节。
- 在minikube上启用了kube-dns插件。 - 尝试从Foo pod内部wget到Bar服务端点。我能够通过bar-server的IP地址做到这一点,但不能使用bar-server:8081/endpoint。 - 尝试nslookup kubernetes.default.svc.cluster.local localhost看起来很好。这里是输出: Server: 127.0.0.1 Address 1: 127.0.0.1 localhost - 另外dns pod查找并运行。这里是kubectl get pods -n=kube-system | grep -i dns的输出: kube-dns-6777479f6b-vxd7m 3/3 Running 9 1d
minikube delete
的情况下更新了 minikube,所以通过删除 minikube 集群并重新启动来解决了问题。 - Sergii Bishyr