我创建了一个利用SparkJava的基于Java的Web服务。默认情况下,此Web服务绑定并侦听端口4567。我公司要求将此端口放置在Docker容器中。我创建了一个Dockerfile并创建了映像,运行时我暴露了端口4567 ...
docker run -d -p 4567:4567 -t myservice
我可以调用我的Web服务来测试我对CURL命令的调用...
curl -i -X "POST" -H "Content-Type: application/json" -d "{}" "http://localhost:4567/myservice"
...这正在起作用。然后,我的公司说它想将其放入Amazon EKS Kubernetes中,因此我将Docker映像发布到该公司的私有Dockerhub中。我创建了三个Yaml文件...
我看到我的对象已创建,并且可以向运行在Kubernetes中的容器获取一个/ bin / bash命令行,然后从那里测试localhost对我的服务的访问是否正常,包括对外部Web服务资源的引用,所以我知道服务很好。
我对入口感到困惑。我需要公开一个URI才能进入我的服务,但是我不确定这应该如何工作。许多示例显示使用NGINX,但我没有使用NGINX。
这是我的文件以及到目前为止我测试过的文件。任何指导表示赞赏。
kind: Service
apiVersion: v1
metadata:
name: my-api-service
spec:
selector:
app: my-api
ports:
- name: main
protocol: TCP
port: 4567
targetPort: 4567
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-api-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: my-api-container
image: hub.mycompany.net/myproject/my-api-service
ports:
- containerPort: 4567
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-api-ingress
spec:
backend:
serviceName: my-api-service
servicePort: 4567
当我运行命令时...
kubectl get ingress my-api-ingress
...显示...
NAME HOSTS ADDRESS PORTS AGE
my-api-ingress * 80 9s
当我运行命令时...
kubectl get service my-api-service
...显示...
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-api-service ClusterIP 172.20.247.225 <none> 4567/TCP 16h
当我运行以下命令时...
kubectl cluster-info
...我明白了...
Kubernetes master is running at https://12CA0954AB5F8E1C52C3DD42A3DBE645.yl4.us-east-1.eks.amazonaws.com
因此,我尝试通过发出...使用CURL达到终点。
curl -i -X "POST" -H "Content-Type: application/json" -d "{}" "http://12CA0954AB5F8E1C52C3DD42A3DBE645.yl4.us-east-1.eks.amazonaws.com:4567/myservice"
一段时间后,我收到超时错误...
curl: (7) Failed to connect to 12CA0954AB5F8E1C52C3DD42A3DBE645.yl4.us-east-1.eks.amazonaws.com port 4567: Operation timed out
我认为自己的入口有误,但在查找非NGINX实例进行比较时遇到困难。
有想法吗?
答案 0 :(得分:1)
barrypicker。
您的服务应为“类型:NodePort” 这个示例非常相似(但是已在GKE中进行了测试)。
kind: Service
apiVersion: v1
metadata:
name: my-api-service
spec:
selector:
app: my-api
ports:
- name: main
protocol: TCP
port: 4567
targetPort: 4567
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-api-deployment
spec:
replicas: 1
selector:
matchLabels:
app: my-api
template:
metadata:
labels:
app: my-api
spec:
containers:
- name: my-api-container
image: hashicorp/http-echo:0.2.1
args = ["-listen=:4567", "-text='Hello api'"]
ports:
- containerPort: 4567
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-api-ingress
spec:
backend:
serviceName: my-api-service
servicePort: 4567
在入口kubectl get ingress <your ingress>
中,您应该看到一个外部IP地址。