我正在尝试使用 Kubernetes 将我的应用程序部署到 Digital Ocean,并且我按照他们的教程操作,但不起作用。这是我的清单:
---
kind: Service
apiVersion: v1
metadata:
name: my-app-load-balancer
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: my-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: addamsson/my-app:v6
ports:
- containerPort: 80
所发生的情况是,它不是路由到80
droplet 的端口,而是转发到一个随机端口:
my-app-load-balancer LoadBalancer 10.245.109.64 206.189.247.38 80:32225/TCP 4m1s
我究竟做错了什么?
我使用 Docker 在本地尝试了我的应用程序并且它可以运行,如果我检查我的 pod 的日志,它看起来也不错:
2020-02-25 14:15:30.105 [main] INFO Application - Responding at http://127.0.0.1:80
编辑:
我尝试用我知道应该可以工作的图像进行操作:springio/gs-spring-boot-docker
并且成功了。但我不明白为什么它不适用于我的图像。如果我检查日志,它看起来不错。我的有问题吗Dockerfile
?
FROM openjdk:8-jre-alpine
RUN mkdir /app
COPY ./build/libs/my-app.jar /app/my-app.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "my-app.jar"]
如果我.jar
在计算机上运行该文件,也没什么问题。
答案1
这是正确的配置。输出中显示的第一个端口是服务清单中指定的值port
。这是集群内服务可用的端口。
第二个端口是a - 当服务类型为或 时,NodePort
此服务在每个节点上公开的端口。它通常由系统从 之间的范围内分配。此端口可以手动选择,但您必须考虑可能发生的端口冲突。这是服务在节点上可用的端口。每个节点将该端口(每个节点上的端口号相同)代理到您的服务中。NodePort
LoadBalancer
30000-32767