如何使用 Digital Ocean 和 Kubernetes 正确配置负载均衡器?

如何使用 Digital Ocean 和 Kubernetes 正确配置负载均衡器?

我正在尝试使用 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

所发生的情况是,它不是路由到80droplet 的端口,而是转发到一个随机端口:

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此服务在每个节点上公开的端口。它通常由系统从 之间的范围内分配。此端口可以手动选择,但您必须考虑可能发生的端口冲突。这是服务在节点上可用的端口。每个节点将该端口(每个节点上的端口号相同)代理到您的服务中。NodePortLoadBalancer30000-32767

相关内容