我有一个非常简单的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
消息。
答案 0 :(得分:4)
您已给定containerPort: 80
,但如果您的应用监听端口8080
,则将其更改为8080
。
有多种方法可以访问kubernetes上部署的应用程序
kubectl port-forward deployment/my-deployment 8080:8080
http://<NODEIP>:<NODEPORT>
答案 1 :(得分:0)
默认情况下,仅k8s应用程序仅在集群中公开,如果要从集群外部访问它,则可以选择以下任何选项:
将部署作为节点端口服务公开( kubectl将部署my-deployment --name = my-deployment-service --type = NodePort 公开),描述服务并获取节点分配给它的端口( kubectl describe svc my-deployment-service )。然后尝试 http://
对于生产级集群,最佳实践是使用LoadBalancer类型( kubectl公开部署my-deployment --name = my-deployment-service --type = LoadBalancer --target-port = 8080 < / strong>)作为此服务的一部分,您会获得一个外部IP,该IP可用于访问您的服务 http:// EXTERNAL-IP:8080 /
您还可以使用 kubectl get ep
查看有关端点的详细信息谢谢