通过Kubernetes部署后如何访问应用程序?

时间:2020-07-26 00:38:37

标签: kubernetes

我有一个非常简单的Python应用程序,当我执行uvicorn main:app --reload时可以正常工作。当我在机器上转到http://127.0.0.1:8000时,就可以与API进行交互。 (我的应用程序没有前端,它只是使用FastAPI构建的API)。但是,我正在尝试通过Kubernetes进行部署,但不确定如何访问/交互我的API。

这是我的deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec: 
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1
        ports:
        - containerPort: 80

当我在终端中输入kubectl describe deployments my-deployment时,我会得到部署的打印输出,其所在的名称空间,pod模板,事件列表等。因此,我很确定它是正确部署。

如何访问该应用程序?该网址是什么?我尝试了各种localhost +端口组合都无济于事。我是kubernetes的新手,所以我试图了解它的工作原理。


更新:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
  namespace: default  
spec:  
  selector: 
    matchLabels:
      app: web
  replicas: 2  
  template:  
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: site
        image: nginx:1.16.1
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: app-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30001

同样,当我使用k8s CLI时,我可以看到我的部署,但是当我点击localhost:30001时,我会收到一条Unable to connect消息。

2 个答案:

答案 0 :(得分:4)

您已给定containerPort: 80,但如果您的应用监听端口8080,则将其更改为8080

有多种方法可以访问kubernetes上部署的应用程序

  1. Port Forward使用kubectl port-forward deployment/my-deployment 8080:8080
  2. Creare a NodePort service并使用http://<NODEIP>:<NODEPORT>
  3. Create a LoadBalanceer service。仅在受支持的云环境(例如AWS,GKE等)中有效。
  4. Use ingress controller这样的nginx公开应用程序。

答案 1 :(得分:0)

默认情况下,仅k8s应用程序仅在集群中公开,如果要从集群外部访问它,则可以选择以下任何选项:

  1. 将部署作为节点端口服务公开( kubectl将部署my-deployment --name = my-deployment-service --type = NodePort 公开),描述服务并获取节点分配给它的端口( kubectl describe svc my-deployment-service )。然后尝试 http:// /

  2. 对于生产级集群,最佳实践是使用LoadBalancer类型( kubectl公开部署my-deployment --name = my-deployment-service --type = LoadBalancer --target-port = 8080 < / strong>)作为此服务的一部分,您会获得一个外部IP,该IP可用于访问您的服务 http:// EXTERNAL-IP:8080 /

您还可以使用 kubectl get ep

查看有关端点的详细信息

谢谢