首页 > 解决方案 > 使用 Kubernetes 和 minikube 在端口 80 上公开一个 Web 应用程序

问题描述

我正在使用我的笔记本电脑(没有云)学习 Kubernetes。我按照 kubernetes(.)io 上的文档开始使用 minikube。我不确定我错过了什么,因为我只能使用高 TCP 端口 32744 而不是标准端口 80 访问我的网络应用程序。我希望能够通过访问 http:// 使用网络浏览器访问我的网络应用程序IP地址。

这是我的deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
    name: webapp-deployment
spec:
    replicas: 2
    selector:
        matchLabels:
            app: nodejs
    template:
        metadata:
            labels:
                app: nodejs
        spec:
            containers:
            - name: nodeapp
              image: localregistry/nodeapp:1.0
              ports:
              - containerPort: 3000
$ minikube service webapp-deployment
|-----------|-------------------|-------------|---------------------------|
| NAMESPACE |       NAME        | TARGET PORT |            URL            |
|-----------|-------------------|-------------|---------------------------|
| default   | webapp-deployment |        3000 | http://192.168.64.2:32744 |
|-----------|-------------------|-------------|---------------------------|

标签: kubernetesminikube

解决方案


这就是 Kubernetes 的工作原理。

3000是容器中的端口,也是暴露应用程序32744NodePort 。造成这种情况的原因有很多,其中之一是该端口是 Web 服务的标准保留端口,80并且443Kubernetes 需要能够运行许多容器和服务。另一个原因是端口0-1024仅限root*nix 系统

如果您真的想80在本地机器上的端口上提供它,我只需设置 Nginx 之类的东西并将流量代理到http://192.168.64.2:32744

# nginx.conf
...
location / {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://192.168.64.2:32744;
}
...

或者,您可以port-forward按照此处建议的其他答案从不受限制的本地帖子中进行操作。

✌️


推荐阅读