我已经在Azure上创建了一个kubernetes集群。我已经在没有前端(微服务)的地方部署了一些Pod。
我已经使用Postman和VS Code在本地进行了测试:这些微服务返回200 O或500。
问题在于,在Kubernetes中我正确地拥有了外部IP,但是我无法从外部进行访问。
我还有另一个Mongo容器,我可以毫无问题地访问它。我留下了一些图像以尝试解决:
你能帮我吗?谢谢!
答案 0 :(得分:1)
Kubernetes比简单的Docker容器要复杂一点,因此一开始运行它可能会引起混淆。我将解释在哪些点上需要配置服务公开。
每个容器都有自己的IP地址空间,因此每个容器可以为应用程序使用相同的端口。在您的情况下,您可能需要使用端口6060。这是应用程序需要绑定到的端口,并且在所有网络接口(ip 0.0.0.0)上都可以从外部访问。这是您将在dockerfile中声明为EXPOSE的端口。
在本地测试时,您可以将每个容器映射到不同的本地端口进行测试:docker run -p external-port:internal-port
用于EXPOSE的端口是您在Pod或Deployment中配置为containerPort
的端口。
一个或多个Pod使用服务在kubernetes中作为负载平衡服务公开。在那里,您可能希望将请求端口(通常为80)映射到容器端口(对于您的情况是6060)。
然后可以使用LoadBalancer在外部公开该服务。 LoadBalancer的外部IP将映射到您的服务的(虚拟IP),该服务将请求端口映射到容器端口,并使用选择器选择适当的容器。该容器包含一个在容器端口上侦听的容器,然后回复您的请求。
必须正确配置整个链条才能正常工作。保持简单(不为每个应用程序使用不同的端口)可以更轻松地实现目标。
答案 1 :(得分:0)
您是否尝试打过
这样的restApi URIExternalIP:Port/uri
这应该可以访问,我也将这种方法与AKS一起使用
答案 2 :(得分:0)
正如我从您的问题和评论中的YAML文件中看到的那样,我认为可能的原因是您在部署容器中设置了该命令,该命令将覆盖映像中的默认命令。因此,我怀疑您的应用程序无法启动,可以进行检查。
我还将建议您检查暴露在外部的端口是否与图像中的端口相同。
答案 3 :(得分:0)
我已经能够解除这四个微服务之一。
我试图用相同的YAML(更改图像URL和端口)取消其余三个微服务,但它们不起作用。
使用的YAML是这样的:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: permissions
spec:
replicas: 1
template:
metadata:
labels:
app: permissions
spec:
containers:
- name: permissions
image: URL IMAGE
ports:
- containerPort: 6060
imagePullSecrets:
- name: nameimage
---
apiVersion: v1
kind: Service
metadata:
name: permissions
spec:
type: LoadBalancer
ports:
- port: 6060
selector:
app: permissions
我添加了此信息以设置其他微服务的资源限制:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: users
spec:
replicas: 1
template:
metadata:
labels:
app: users
spec:
containers:
- name: users
image: URL IMAGE
resources:
requests:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 6061
---
apiVersion: v1
kind: Service
metadata:
name: users
spec:
type: LoadBalancer
ports:
- port: 6061
selector:
app: users
正如我所说,我只能举起第一个。
有帮助吗?
谢谢!