如何从外部访问在 EC2 的 Minikube 中部署为 NodePort 的服务

How to access a service deployed as NodePort in Minikube in EC2 from outside

我已经在 EC2 Linux 实例中安装了 minikube。

Minikube IP : 192.168.49.2, 
EC2 Instance IP: 10.X.X.X

我已将应用程序部署为 NodePort 服务类型,其中

port: 80
targetPort: 80
nodePort: 32768
and able to access it with curl http://192.168.49.2:32768 within the cluster.

我应该如何将此应用程序暴露给外界?
如果可以选择端口转发,那么我尝试了以下方法:

kubectl port-forward --address <InstanceIP> svc/my-service 8888:80

这总是报错:

Unable to listen on port 5000: 
Listeners failed to create with the following errors: 
[unable to create listener] error: 
unable to listen on any of the requested ports: [{8888 80}]

我确定 8888 端口上没有服务 运行。

kubectl port-forward --address <InstanceIP> svc/my-service 8888:32768

这表示,错误:

Service my-service does not have a service port 32768.

感谢任何帮助

How should I expose this application to the outside world?

你应该使用 Servicetype: LoadBalancer

LoadBalancer 会给你一个外部 IP,允许你从集群外部连接到它。

如果您只需要它进行测试,这就是您使用 minikube 的原因,那么端口转发应该满足要求。

LoadBalancerminikube

结合使用

为了在 minikube 中使用 LoadBalanacer 你应该打开一个新终端并执行 minikube tunnel

# Port forward to the desired service, 
# dont forget to add the namespace if any

#
# You should forward to port 80 which is the port defined in your service
#     port : 80
#     targetPort : 80
kubectl port-forward svc/my-service 8888:80 -n <namespace>

# As you mentioned you tried it already and it's not working
# so follow below and try to expose your service with

kubectl expose

现在您应该可以连接到您的服务了。


这是生成 Service

的完整示例

https://github.com/nirgeier/KubernetesLabs/tree/master/Labs/02-Deployments-Imperative

示例使用

动态生成 Service
kubectl expose deployment -n codewizard multitool --port 80 --type NodePort