Load-Balancing

如何使用帶有 Kubernetes 的 Digital Ocean 正確配置負載均衡器?

  • February 25, 2020

我正在嘗試使用 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在我的電腦上執行該文件也很好。

這是正確的配置。輸出中顯示的第一個埠是port服務清單中指定的值。這是集群內服務可用的埠。

第二個埠是a - 當服務類型為orNodePort時,該服務在每個節點上公開的埠。它通常由系統從 之間的範圍內分配。可以手動選擇此埠,但您必須考慮可能發生的埠衝突。這是服務在節點上可用的埠。每個節點都將該埠(每個節點上的相同編號)代理到您的服務中。NodePort``LoadBalancer``30000-32767

引用自:https://serverfault.com/questions/1004515