我正在尝试在我使用 eksctl 创建的 EKS 集群上部署“Hello World”应用程序。我的集群运行着 2 个 pod,并且正在学习位于 https://shahbhargav.medium.com/hello-world-on-kubernetes-cluster-6bec6f4b1bfd 的教程。我使用以下 yaml 文件创建了一个部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world-deployment
labels:
app: hello-world
spec:
selector:
matchLabels:
app: hello-world
replicas: 2
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: bhargavshah86/kube-test:v0.1
ports:
- containerPort: 80
resources:
limits:
memory: 256Mi
cpu: "250m"
requests:
memory: 128Mi
cpu: "80m"
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30081
type: NodePort
然后我通过运行以下命令创建了部署:
kubectl create -f hello-world.yaml
我无法在本地主机上访问它。我相信我错过了一个步骤,因为我在 Linux EC2 实例上创建了集群和部署,我使用 Putty SSH 连接到该实例,并且我正在访问我的 Windows 机器上的 localhost。任何关于我如何连接的建议将不胜感激。目前,我在尝试连接到 http://localhost:30081/
时收到以下信息答案 0 :(得分:2)
正如您所提到的,问题在于您尝试通过端口 30081 访问本地计算机,但您创建的 Pod 位于云中的 EKS 集群中。如果您想尝试应用程序是否正常工作,您可以像之前一样通过 SSH 连接到工作程序节点,然后像这样使用 curl 命令。
curl localhost:30081
该命令将返回您在控制台中运行的网站(不带任何格式)。
我认为在您的情况下,最好的方法是使用 kubectl port-forward 命令。此命令会将您的本地机器端口之一绑定到 Pod 的端口之一。
这是命令的格式。
kubectl port-forward POD-NAME-CURRENTLY-RUNNING-IN-CLUSTER UNUSED-PORT-IN-YOUR-PC:APPLICATION-PORT
这是一个如何使用它并检查它是否有效的示例。
kubectl port-forward hello-world-xxxxxx-xxxxx 8000:80
curl localhost:8000
请注意,我没有使用服务端口来访问 pod。这个工具非常适合调试!
另一种方法可能是使用安全组打开端口 30081 并访问工作节点的 IP,但我认为这是不安全的,并且还有很多额外的步骤。您应该查看 services 类型之间的区别。
如果您对我的回答有任何疑问,请告诉我。我不是专家,我可能是错的!
而且英语也不是我的母语。
干杯