在 k8s 集群上部署 Hello World

时间:2021-03-09 00:19:02

标签: kubernetes amazon-eks

我正在尝试在我使用 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/

时收到以下信息

enter image description here

1 个答案:

答案 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 类型之间的区别。

如果您对我的回答有任何疑问,请告诉我。我不是专家,我可能是错的!

而且英语也不是我的母语。

干杯