使用Kubernetes和minikube在端口80上公开一个Web应用

时间:2020-07-18 05:20:24

标签: kubernetes minikube

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

这是我的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 |
|-----------|-------------------|-------------|---------------------------|

2 个答案:

答案 0 :(得分:4)

这就是Kubernetes的工作方式。

3000是容器中的端口,32744是应用程序暴露所在的NodePort。造成这种情况的原因有多种,其中之一是端口80443是Web服务的标准保留端口and,Kubernetes需要能够运行许多容器和服务。另一个原因是端口0-1024restricted to root only on *nix systems??。

如果您真的想在本地计算机的端口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,作为此处建议的其他答案。

✌️<​​/ p>

答案 1 :(得分:1)

您可以为此使用kubectl port-forward

$ kubectl port-forward -n <namespace> pod/mypod 8888:5000

它做什么?

在本地侦听端口8888,然后转发到Pod中的端口5000。

注意:您也可以通过port-forwardkubectl port-forward svc/<service-name> PORT:PORT与k8s服务一起使用。