我在kubernete和docker中使用微服务,当Zuul(网关)将请求数据转发到服务时,我得到了一个UnknownHostException
,我不能通过pod名称ping到服务容器(但是当我使用docker swarm而不是Kubernetes时,我可以正常地通过主机名ping)
这是我的服务yaml文件
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: merchantservice
labels:
run: merchantservice
spec:
template:
metadata:
labels:
name: merchantservice
spec:
containers:
- name: merchantservice
image: merchantservice:latest
ports:
- containerPort: 8001
env:
- name: EUREKA_SERVER
value: "eureka1"
- name: EUREKA_SERVER2
value: "eureka2"
- name: CONFIG_SERVER
value: "configserver"
---
apiVersion: v1
kind: Service
metadata:
name: merchantservice
spec:
selector:
name: merchantservice
ports:
- port: 8001
targetPort: 8001
type: LoadBalancer
这是错误输出
2019-05-28 04:29:53.443 WARN 1 --- [nio-8444-exec-6] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
...
Caused by: com.netflix.client.ClientException: null
...
Caused by: java.lang.RuntimeException: java.net.UnknownHostException: merchantservice-79cc77d9cc-224mf: Try again
at rx.exceptions.Exceptions.propagate(Exceptions.java:57) ~[rxjava-1.3.8.jar!/:1.3.8]
at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:463) ~[rxjava-1.3.8.jar!/:1.3.8]
at rx.observables.BlockingObservable.single(BlockingObservable.java:340) ~[rxjava-1.3.8.jar!/:1.3.8]
at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
... 158 common frames omitted
Caused by: java.net.UnknownHostException: merchantservice-79cc77d9cc-224mf: Try again
...
确保在必须通过Zuul路由的微服务的application.properties文件中添加了eureka.instance.PreferIPAddress=true。
参考:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-eureka-server.html#spring-cloud-eureka-server-prefer-ip-address
Kubernetes中的网络可以说对初次接触Kubernetes或者没有网络方面经验的人来说可能是其中最难的部分。Kubernetes本身并不提供网络功能,只是把网络接口开放出来,通过插件的形式实现。 网络要解决的问题 既然Kubernetes中将容器的联网通过插件的方式来实现,那么该如何解决容器的联网问题呢? 如果您在本地单台机器上运行docker容器的话会注意到所有容器都会处在docker0网
SocketException:在简单的Kubernetes pod中无法访问网络(连接失败),它可以卷曲到Internet。
我认为的服务不可用。 : 谁能帮忙?
对你们中的一些人来说,这个问题可能不太合理。 我试图了解、和之间的区别,以及在什么时候通过一个示例使用这些区别。我想我对以下概念的理解是正确的,K8s由以下组件组成 节点-虚拟机或物理机器。运行kubectl和docker进程 吊舱--封装容器和卷(存储)的单元。如果一个pod包含多个容器,则共享卷可能是进程通信的方式 节点可以有一个或多个豆荚。每个吊舱都有自己的IP 集群-节点的副本。集群中的每
背景: 目前我们正在使用Docker和Docker Compose为我们的服务。我们已经将不同环境的配置外部化到定义应用程序读取的环境变量的文件中。例如文件: 和文件: 因此,在启动容器时,我们可以简单地使用或文件: 然后,我们的应用程序根据中定义的环境变量获取其配置。 问题: 有没有办法从Kubernetes中的文件中提供环境变量(例如定义pod时),而不是像这样硬编码它们:
我有一个Kubernetes pod(让我们称之为POD-A),我希望它使用某个配置文件来使用k8s API执行一些操作。配置文件将是一个YAML或JSON,由POD中的应用程序解析。 配置文件由云上的应用服务器托管,它的最新版本可以根据触发器提取。配置文件包含k8s集群中所有部署的配置细节,并将用于使用POD-A中的k8s API更新部署。 现在我想的是将这个配置文件保存在配置映射中,每次拉出一