kubernetes - 在本地 Kubernetes 上公开服务

标签 kubernetes

我在 Mac OS 上运行与 docker 捆绑的本地 kubernetes。

如何公开服务,以便我可以通过 Mac 上的浏览​​器访问该服务?

我创建了:

a) 部署包括 apache httpd。

b) 通过 yaml 服务:

apiVersion: v1
kind: Service
metadata:
  name: apaches
spec:
  selector:
    app: web
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
  externalIPs:
  - 192.168.1.10 # Network IP of my Mac

我的服务看起来像:
$ kubectl get service apaches
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE
apaches   NodePort   10.102.106.158   192.168.1.10   80:31137/TCP   14m

我可以通过 wget $CLUSTER-IP 在本地访问我的 kubernetes 集群中的服务

我尝试调用http://192.168.1.10/在我的 Mac 上,但它不起作用。

这个question处理类似的问题。但是解决方案没有帮助,因为我不知道我可以使用哪个 IP。

更新

感谢 Michael Hausenblas,我使用 Ingress 制定了一个解决方案.
尽管如此,仍有一些悬而未决的问题:
  • 服务的外部IP是什么意思?当我不直接从外部访问服务时,为什么需要外部 IP?
  • 服务端口31137是什么意思?
  • kubernetes 文档描述了一种[通过 NodePort 在 minikube 中发布服务][4] 的方法。这也可以与 docker 上捆绑的 kubernetes 一起使用吗?
  • 最佳答案

    非常简单的例子
    方法1

    $ kubectl create deployment nginx-dep --image=nginx --replicas=2
    
  • 获取 pod

  • $ kubectl get pods
    NAME                        READY   STATUS    RESTARTS   AGE
    nginx-dep-5c5477cb4-76t9q   1/1     Running   0          7h5m
    nginx-dep-5c5477cb4-9g84j   1/1     Running   0          7h5m
    
  • 使用 kubectl port 访问 pod

  • $ kubectl port-forward nginx-dep-5c5477cb4-9g84j 8888:80
    Forwarding from 127.0.0.1:8888 -> 80
    Forwarding from [::1]:8888 -> 80
    
  • 现在做一个curllocalhost:8888

  • $ curl -v http://localhost:8888 
    
    方法2
    你可以曝光port 80部署的(应用程序运行的地方,即 nginx 端口)
    通过 NodePort
    $ kubectl expose deployment nginx-dep --name=nginx-dep-svc --type=NodePort --port=80
    
  • 获取服务

  • $ kubectl get svc 
    NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP        31d
    nginx-dep-svc   NodePort    10.110.80.21   <none>        80:31239/TCP   21m
    
  • 使用 hte NodePort
  • 访问部署

    $ curl http://localhost:31239  
    

    关于kubernetes - 在本地 Kubernetes 上公开服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219171/

    相关文章:

    docker - Kubernetes 多个具有不同配置的相同应用程序和数据库部署

    kubernetes - Kubernetes +蝗虫(负载测试)

    logging - fluent-bit 如何向发送到 splunk 的每个事件消息添加自定义元数据

    cron - 如何获取由 cronjob 创建的作业日志?

    kubernetes - 如何检查 pod 正在使用 kubectl 监听的端口而不是查看 dockerFile?

    kubernetes - 如何在 Prometheus 中推送 Kubernetes 指标而不是拉取?

    python-3.x - 猎鹰应用程序无法呈现Openapi(swagger)规范

    Kubernetes 报告 "pod didn' t 触发扩展(如果添加新节点则不适合)”,即使它会?

    kubernetes 使用不同的命令为同一个镜像创建多个 pods/deployments

    c# - AKS集群Pod Kube配置位置