簡體   English   中英

運行/卷曲簡單的 Java 應用程序部署並暴露給 AWS 上托管的 Kubernetes 集群

[英]Run/curl simple Java application deployed and exposed to Kubernetes cluster hosted on AWS

我是 Kubernetes 的新手,並且很長時間將我的應用程序配置為托管在 AWS EKS 上托管的 Kubernetes 集群上。

現狀:我很確定LoadBalancer類型的服務已啟動並正在運行。 它有它的吊艙和所有的東西在運行。 該應用程序是帶有輸入的簡單 Java 應用程序。 您可以嘗試通過以下方式從 Docker Hub 拉取圖像來訪問它:

docker run -i ardulat/mckinsey

問題:如何運行托管在 Kubernetes 集群上的 Java 應用程序(不是 Spring,不是 REST)?

已經嘗試過

  • curl -v <EXTERNAL-IP>:<PORT>輸出:
*   Trying 3.134.148.191...
* TCP_NODELAY set
* Connected to a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com (3.134.148.191) port 8080 (#0)
> GET / HTTP/1.1
> Host: a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com:8080
> User-Agent: curl/7.63.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com left intact
curl: (52) Empty reply from server
  • nc -v <EXTERNAL-IP> <PORT>輸出:
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif en0
    src 172.20.22.42 port 63865
    dst 3.13.128.24 port 8080
    rank info not available
    TCP aux info available

Connection to a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com port 8080 [tcp/http-alt] succeeded!

因此,我假設連接正常並且服務啟動並運行,除非我試圖以錯誤的方式連接到 Java (.jar) 應用程序。 你有什么建議嗎?

您應該更改您的dockerfile並將CMD更改為ENTRYPOINT ,這在此處得到了很好的解釋。 我還建議閱讀Define a Command 和 Arguments for a Container

  • CMD 設置默認命令和/或參數,可以在 docker 容器運行時從命令行覆蓋。
  • ENTRYPOINT 配置將作為可執行文件運行的容器。

您的dockerfile可能如下所示:

FROM java:8
WORKDIR /
ADD Anuar.jar Anuar.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Anuar.jar"]

您的服務可能如下所示:

apiVersion: v1
kind: Service
metadata:
  name: javaservice
  labels:
    app: javaservice
spec:
  type: LoadBalancer
  selector:
    app: javaservice
  ports:
  - protocol: TCP
    port: 8080
    name: http

此外,您要在 AWS 上使用哪個 LoadBalancer 也很重要,其中有默認的 Classic Load Balancer 和Network Load Balancer 您可以在內部負載均衡器上閱讀更多相關信息,並查看 AWS 文檔以了解負載均衡

Amazon EKS 通過LoadBalancer類型的 Kubernetes 服務支持網絡負載均衡器和傳統負載均衡器。 負載均衡器的配置由添加到服務清單中的注釋控制。

默認情況下,Classic Load Balancer 用於LoadBalancer類型的服務。 要改用網絡負載均衡器,請將以下注釋應用於您的服務:

service.beta.kubernetes.io/aws-load-balancer-type: nlb

有關將網絡負載均衡器與 Kubernetes 一起使用的更多信息,請參閱 Kubernetes 文檔中的AWS 上的網絡負載均衡器支持

默認情況下, LoadBalancer類型的服務會創建面向公眾的負載均衡器。 要使用內部負載均衡器,請將以下注釋應用於您的服務:

service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0

對於內部負載均衡器,您的 Amazon EKS 集群必須配置為在您的 VPC 中使用至少一個私有子網。 Kubernetes 檢查子網的路由表以確定它們是公共的還是私有的。 公共子網使用互聯網網關直接連接到互聯網,但私有子網沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM