Load-Balancing
如何使用帶有 Kubernetes 的 Digital Ocean 正確配置負載均衡器?
我正在嘗試使用 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
在我的電腦上執行該文件也很好。
這是正確的配置。輸出中顯示的第一個埠是
port
服務清單中指定的值。這是集群內服務可用的埠。第二個埠是a - 當服務類型為or
NodePort
時,該服務在每個節點上公開的埠。它通常由系統從 之間的範圍內分配。可以手動選擇此埠,但您必須考慮可能發生的埠衝突。這是服務在節點上可用的埠。每個節點都將該埠(每個節點上的相同編號)代理到您的服務中。NodePort``LoadBalancer``30000-32767