我已经配置了托管在AWS上的Kubernetes服务(类型为LoadBalancer)。服务的吊舱以交互模式运行(这是在吊舱中运行容器所需的)。其中的容器正在运行一个简单的Java .jar应用程序,该应用程序接收输入并在此基础上生成输出。
问题:我如何在Kubernetes容器中将输入传递给应用程序?
以下是yaml配置中确保在交互模式下运行的部分:
spec:
containers:
- image: ardulat/mckinsey
imagePullPolicy: Always
name: anuar-mckinsey
ports:
- containerPort: 8080
name: http
protocol: TCP
stdin: true
tty: true吊舱已经启动并运行。正如您从配置中看到的,它接收TCP连接。
这是吊舱的服务:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
anuar-mckinsey LoadBalancer 10.100.239.207 a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com 8080:32516/TCP通过查看容器中从Java应用程序输出打印消息的pod日志,可以确保容器中的pod和服务配置正确。
已经尝试过
* Trying 18.190.142.22...
* TCP_NODELAY set
* Connected to a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com (18.190.142.22) 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 serverfound 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 172.20.22.204 port 51144
dst 18.190.142.22 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!的最终想法:看起来配置是正确的,服务运行在AWS上托管的集群上。日志产生正确的输出。但是,我不能发送消息(通过TCP连接?)到容器内的Java应用程序。关于如何将输入传递给它,有什么想法吗?
发布于 2019-11-19 22:42:32
根据注释中的讨论,信息是Java应用程序使用System.in接收输入。这通常等同于stdin。
向容器中的应用程序发送输入并获取输出的一种方法是通过附合将本地stdin和stdout连接到容器的原始终端模式中的进程:
kubectl -n <namespace> attach <pod-name> -c <container-name> -i -t关于如何从外部访问应用程序而不直接访问豆荚和使用服务的附加问题,我建议:
ServerSocket来侦听和接受特定端口号上的连接。System.in一样。这个在这里可能是新代码的良好起点。您可以使用telnet 127.0.0.1 <port>或curl telnet://127.0.0.1:<port>/在本地测试应用程序,并在没有在容器中运行应用程序时进行测试。
相反,在我看来,公开一个基于HTTP的服务对这个应用程序来说似乎是一个过分的选择。
发布于 2019-12-07 03:34:50
您可以使用环境变量来定义参数。
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]你刚刚为你的库伯内特斯舱定义了一个论点。
此外,最好将您的吊舱配置为使用configMap或Secrets。
发布于 2019-12-24 10:05:46
如果使用docker来构建kubernetes映像,则可以在启动应用程序时使用对接文件中的ENTRYPOINT或CMD属性传递参数。有关更多信息,请参考下面的链接。
https://stackoverflow.com/questions/58939311
复制相似问题