Ser*_*hyr 5 dns service-discovery kubernetes kube-dns minikube
我正在尝试在minikube安装上运行的k8上运行两项服务。因此,我有服务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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
该BAR_SERVICE_URLEVN变量内使用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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当我使用Foominikube ip和公开的服务端口访问服务时,在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
Run Code Online (Sandbox Code Playgroud)
但是,我可以bar-server/endpoint像这样使用minikube ip和暴露端口访问http://192.168.99.100:31168/endpoint。
因此,看起来我可以从集群外部访问Foo和Bar服务。但是Foo服务无法解析Bar服务主机,也无法访问它。
UPD:这是一些更新,其中包含麻烦的详细信息。
minikube该kube-dns插件被启用。Foopod的范围尝试wget到Bar服务端点。我可以通过的IP地址来执行此操作,bar-server但不能使用bar-server:8081/endpoint。尝试nslookup kubernetes.default.svc.cluster.local localhost看起来不错。这是输出:
服务器:127.0.0.1地址1:127.0.0.1本地主机
另外,dnspod查找并正在运行。这是输出kubectl get pods -n=kube-system | grep -i dns
kube-dns-6777479f6b-vxd7m 3/3运行9 1d
尝试环境变量 BAR_SERVER_SERVICE_HOST。不要注入它,kubernetes 为同一命名空间内的服务注入它
在此处阅读有关服务发现选项的信息: https://kubernetes.io/docs/concepts/services-networking/service/#discovering-services
| 归档时间: |
|
| 查看次数: |
3462 次 |
| 最近记录: |