当前位置: 首页 > 知识库问答 >
问题:

如何将kubernetes pod暴露给外部IP?

红智鑫
2023-03-14

我有一个kubernetes文件,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <some_name>
spec:
  replicas: 1
  template:
    spec:
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      containers:
        - image: <some_image>
          imagePullPolicy: Always
          name: <some_name>
          env:
          - name: ES_HOST
            value: blahblah.us-west-2.es.amazonaws.com
          - name: ES_PORT
            value: "443"
          - name: DATALOADER_QUEUE
            value: some_sqs_queue
          - name: AWS_DEFAULT_REGION
            value: us-west-2
            ...<bunch of variable>
            limits: &main_limits
              cpu: 500m
              memory: 256Mi
            requests: *main_limits

如果我想将其公开给外界流量,因为假设我的应用程序在端口上使用prometheus公开应用程序指标...如何向外界公开该端口?

我的应用程序有以下两行代码启动需要公开的http服务器:


METRICS_PORT=9100
start_http_server(METRICS_PORT)

那是普罗米修斯服务器

共有3个答案

闽念
2023-03-14

有一些方法可以在Kubernetes中公开应用程序

服务可用于在内部公开、在同一集群中运行的其他应用程序(类型:ClusterIP)、将主机端口外部绑定到应用程序节点(类型:NodePort)或负载平衡节点之间的流量(类型:LoadBalancer)

ClusterIP:在集群内部IP上公开服务。选择此值将使服务只能从集群内访问。这是默认的服务类型。

NodePort:在静态端口(NodePort)上公开每个节点IP上的服务。NodePort服务路由到的ClusterIP服务会自动创建。您将能够通过请求:从集群外部联系NodePort服务。

LoadBalancer:使用云提供商的负载平衡器对外公开服务。自动创建外部负载平衡器路由到的NodePort和ClusterIP服务。

如果您使用的是云提供商,您可以使用服务类型LoadBalancer,那么您的服务将从您的云提供商获得外部IP,并且可以公开访问:

apiVersion: v1
kind: Service
metadata:
  name: <<some name>>
spec:
  selector:
    app: my_app_name # << HERE
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

请注意,为了使其有效,您需要在部署文件中添加一个选择器,以了解哪些POD重定向了请求。像这样:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <some_name>
spec:
  selector:
    app: my_app_name # <= SELECTOR HERE
  replicas: 1
  template:
 ...

要检查一切是否正常,请使用下面的命令并检查外部IP:

kubectl获取svc

参考文献:

https://kubernetes.io/docs/concepts/services-networking/service/#publishing-服务服务类型

https://kubernetes.io/docs/concepts/services-networking/service/#with-selectors

https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

轩辕晔
2023-03-14

试试下面的样品

apiVersion: v1
kind: Service
metadata:
  name: hello
spec:
  selector:
    app: hello
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: nginx
        image: nginx

您应该可以访问hello服务http://HOST_IP:NODE_PORT

姜弘新
2023-03-14

在本地网络之外公开Prom指标有点奇怪,但除此之外,您使用的是服务。通常是负载平衡器类型,但在特殊情况下有时是NodeIP。查看文档了解更多信息。

 类似资料:
  • 27.2 将Bean暴露给JMX MBeanExporter是Spring JMX 框架中的核心类。它负责把Spring bean注册到JMX MBeanServer。例如,下面的例子: package org.springframework.jmx; public class JmxTestBean implements IJmxTestBean { private Stri

  • Exposing models over REST(将模型暴露给REST) 简介 REST 路径 使用 REST 路由 请求数据格式化 使用HTTP查询字符串传递JSON对象或数组 响应数据格式化 禁用 API Explorer 预定义的远程方法(remote methods) 暴露/隐藏 models, 方法, 端点(endpoints) 隐藏的方法和REST端点 案例: 只读端点(endpoi

  • 我知道在linux主机系统上使用pulse audio是可能的,但是< code>paprefs是为Linux而不是mac构建的。

  • 问题内容: 在我的工作中,我与docker一起工作,而该选项的工作方式就像将docker容器端口转发到机器的超级按钮一样。这使我可以通过示例添加使用某些端口的艰苦任务: 在9001端口为我的覆盖率报告提供帮助 我的应用程序的本地部署版本在端口9000中提供 手表实时重新加载端口35729 对于单元测试运行器,请使用9876端口 当我开始在Mac中使用Docker时,我遇到的第一个问题是:该选项不再

  • 主要内容:1.概述,2.doExportUrls,3. Protocol1.概述 Dubbo 服务暴露有两种方式 本地暴露,JVM 本地调用。配置如下: <dubbo:service scope=“local” /> <dubbo:service scope=“remote” /> 在不配置 scope 的情况下,默认两种方式都暴露。 2.doExportUrls 本地暴露服务的顺序图如下: 我们看到 ServiceConfig#export() 方法中,会在配置初始