Kubernetes - 没有选择器的服务

2023-11-25

我正在为没有选择器的 Kubernetes 服务而苦苦挣扎。该集群通过 kops 安装在 AWS 上。我有一个包含 3 个 nginx pod 的部署,暴露端口 80:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: ngix-dpl                 # Name of the deployment object
 labels:
   app: nginx                     
spec:
 replicas: 3                    # Number of instances in the deployment
 selector:                      # Selector identifies pods to be
     matchLabels:               #     part of the deployment 
        app: nginx              #     by matching of the label "app" 
 template:                      # Templates describes pods of the deployment
   metadata:
     labels:                    # Defines key-value map
       app: nginx               # Label to be recognized by other objects
   spec:                        #     as deployment or service
     containers:                # Lists all containers in the pod
     - name: nginx-pod          # container name
       image: nginx:1.17.4      # container docker image
       ports:
       - containerPort: 80      # port exposed by container

创建部署后,我记下 IP 地址:

$ kubectl get pods -o wide | awk {'print $1" " $3" " $6'} | column -t
                                                                           NAME                       STATUS   IP
curl                       Running  100.96.6.40
ngix-dpl-7d6b8c8944-8zsgk  Running  100.96.8.53
ngix-dpl-7d6b8c8944-l4gwk  Running  100.96.6.43
ngix-dpl-7d6b8c8944-pffsg  Running  100.96.8.54

并创建了一个应该提供 IP 地址的服务:

apiVersion: v1
kind: Service
metadata:
  name: dummy-svc
  labels:
    app: nginx
spec:
 ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
  name: dummy-svc 
subsets: 
  - addresses:
    - ip: 100.96.8.53
    - ip: 100.96.6.43
    - ip: 100.96.8.54
    ports:
    - port: 80
      name: http

服务创建成功:

$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
dummy-svc    ClusterIP   100.64.222.220   <none>        80/TCP    32m
kubernetes   ClusterIP   100.64.0.1       <none>        443/TCP   5d14h

不幸的是,我尝试通过同一命名空间的另一个 pod 的服务连接到 nginx 失败:

$ curl 100.64.222.220
curl: (7) Failed to connect to 100.64.222.220 port 80: Connection refused

我可以直接成功连接到 nginx pod:

$ curl 100.96.8.53
<!DOCTYPE html>
<html>
<head>
....

我注意到我的服务没有任何端点。但我不确定手动端点是否应该显示在那里:

$ kubectl get svc/dummy-svc -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |      
       {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"dummy-svc","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":80}]}}
  creationTimestamp: "2019-11-22T08:41:29Z"
  labels:
    app: nginx
  name: dummy-svc
  namespace: default
  resourceVersion: "4406151"
  selfLink: /api/v1/namespaces/default/services/dummy-svc
  uid: e0aa9d01-0d03-11ea-a19c-0a7942f17bf8
spec:
  clusterIP: 100.64.222.220
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

我知道这不是服务的正确用例,并且使用 Pod 选择器将使其正常工作。但我想了解为什么这个配置不起作用。我不知道在哪里寻找解决方案。任何提示将不胜感激。


如果您从端点配置中删除“名称”字段,它就会起作用。它应该看起来像这样:

apiVersion: v1
kind: Endpoints
metadata:
  name: dummy-svc 
subsets: 
  - addresses:
    - ip: 172.17.0.4
    - ip: 172.17.0.5
    - ip: 172.17.0.6
    ports:
    - port: 80
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes - 没有选择器的服务 的相关文章

  • 连接到 Docker Postgres 容器连接超时

    所以我所做的是 docker run d e POSTGRES USER user e POSTGRES PASSWORD 456789 name admin service p 5432 5432 postgres 当我检查时docker
  • Docker 主机上运行的容器是否有最大数量?

    基本上 标题说明了一切 在单个 Docker 主机上同时运行的容器数量是否有限制 您可能会遇到 并解决 许多系统限制 但存在大量灰色区域 具体取决于 您如何配置 Docker 容器 您在容器中运行的内容 您使用的内核 发行版和 docker
  • Openshift pod 运行时用户 ID 与 Dockerfile 中的用户不匹配

    我们在 Dockerfile 和入口点 shell 脚本中有 默认 用户 需要在运行时执行 当我们将其部署到 Openshift 集群 4 6 中时 pod 具有不同的用户 并且由于此入口点 shell 脚本失败 因此应用程序无法启动 请求
  • 如何使用 docker 和 monorepo 组织共享库

    我拥有的 我有 2 个 python 应用程序共享一些代码 足以让我尝试将共享部分隔离到模块 包 库中 我故意使术语含糊不清 因为我不确定解决方案是什么 我的所有代码都在单一存储库中 因为我希望克服管理比我们团队成员更多的存储库的一些烦恼
  • 无法解析 docker 容器之间的主机名

    我在单独的撰写文件中创建了两个容器 用于应用程序隔离 每个应用程序可能在撰写文件中定义了多个容器 例如后备数据库 这些容器通过名为 common 的外部网络链接 一个示例撰写文件是 version 2 services rabbitmq i
  • 为什么只有 50 个实例在 AWS lambda 上运行?

    我在用context logStreamName识别 lambda 实例 并发设置为无保留 但日志显示只有 50 个实例正在运行 我是否误解了logStream pre logStream pre实例 我从那里得到的信息这个博客 https
  • Daphne Django 文件上传大小限制

    我使用 Daphne 进行套接字和 http 连接 我正在运行 4 个工作容器 并且现在在 docker 容器中本地运行所有内容 如果我尝试上传 400MB 的文件 我的 daphne 服务器会失败 它适用于最大 15MB 的小文件 我的
  • 连接到上游时 Django Gunicorn nginx(111:连接被拒绝)

    一个Django应用程序在AWS实例上运行 通过gunicorn和nginx配置 它运行良好一年多了 但是突然 我收到了502 bad gateway错误 然后我在nginx错误日志中看到了下面提到的消息 2017 05 17 16 18
  • nginx/mono 2.8 上的 ASP.Net MVC 2

    我正在尝试在 Linux 环境上设置 ASP Net MVC 2 应用程序 我在 VirtualBox 上安装了 Ubuntu 10 10 然后从源安装了 Mono 2 8 之后我安装了 nginx 并按照建议进行配置here http w
  • Concourse CI 找不到 kubernetes 秘密

    当运行程序尝试检索资源时 我收到以下错误 checking failed Expected to find variables git 我的资源看起来类似于 name resource repo type git source uri ht
  • 从 SCDF 执行任务时,数据库凭证作为部分作业参数公开

    我有自定义构建的 SCDF 它在 Openshift 中构建为 docker 映像 并在 server deployment yaml 中称为 docker 映像 我使用 Oracle 数据库来存储任务元数据 并且是此处的外部源 我传递了
  • AWS CloudWatchLog 限制

    我正在尝试找到集中式解决方案来将我的应用程序日志记录从数据库 RDS 中移出 我本想使用 CloudWatchLog 但注意到 PutLogEvents 请求有限制 PutLogEvents 请求的最大速率为每秒 5 个请求 每个日志流 即
  • 如何使用缓存快速重建dockerfile?

    我想优化我的 Dockerfile 我希望将缓存文件保留在磁盘中 但是 当我跑步的时候我发现docker build 它总是尝试从网络获取每个文件 我希望在构建期间共享我的缓存目录 例如 var cache yum x86 64 6 但是
  • Docker 多个相同端口问题

    我目前正在解决方案中开发两个相互关联的 ASP NET Core WebAPI 服务 Service1 和 Service2 两者都有 docker 文件并暴露端口 80 Service1是一个独立的服务 需要从Service2调用 我已经
  • Kubectl 推出重启以实现有状态集

    根据kubectl 文档 https kubernetes io docs reference generated kubectl kubectl commands rollout kubectl rollout restart适用于部署
  • 有人试图破解我的服务器吗?请告诉我我能做什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在我的服务器日志文件中找到了这些请求 我在亚马逊EC2上使用nodejs manager html manager html manag
  • AWS CLI s3 复制失败并出现 403 错误,尝试管理用户上传的对象

    尝试将文件从 S3 存储桶复制到我的本地计算机 aws s3 cp s3 my bucket name audio 0b7ea3d0 13ab 4c7c ac66 1bec2e572c14 wav fatal error An error
  • 如何更改AWS ECS集群中的实例类型?

    我在 AWS EC2 容器服务中有一个集群 设置完毕后 我使用了 t2 micro 实例 因为这些实例足以进行开发 现在我想使用更强大的实例 例如 m4 large 我想知道是否可以仅更改实例类型 这样我就不需要重新创建整个集群 我找不到如
  • 为 Ruby On Rails 环境创建 Docker 映像时出错(从 Dockerfile)

    估计是环境问题 当我手动执行此操作 没有 Dockerfile 时 它可以工作 这是我的 Dockerfile FROM ubuntu 14 04 RUN apt get update RUN apt get upgrade assume
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无

随机推荐

  • 在 SwiftUI 中设置 TextField 的初始值 - 比较新旧值

    我看过很多有关如何使用空 TextField 来收集新值的示例和教程 但没有一个展示如何使用 TextField 来编辑值 在我的用例中 我希望用视图模型中的数据预填充 预填充 TextField 然后当用户编辑数据时 应启用 保存 按钮
  • matlab 将绘图导出为矢量格式

    之前我一直以光栅格式 JPG PNG 导出 Matlab 图形 有没有办法以矢量格式 SVG 从 Matlab 导出绘图 我需要它来将绘图插入 LaTeX 文档中 到目前为止我发现的唯一的东西是来自数学工作和答案堆栈交换 但这看起来太复杂了
  • 在哪里可以找到所有可用的带有 selenium 的 ChromeOptions 的列表?

    在哪里可以找到所有可用的带有 selenium 的 Chrome 选项的列表 在 python 环境中使用 selenium 进行爬行时 我必须在 chrome webdriver 中使用 flash 所以我试图找到一个允许 Flash 的
  • 提高 PHP GD 生成图像的质量

    我将开始使用 GD 库在 PHP 中构建地图生成器 我使用该库生成了一些图像 但它们的质量不佳 我只是想知道有什么方法可以提高图像质量 生成的图像是 我制作的代码是
  • 将阿拉伯语数据插入mysql数据库

    我尝试输入阿拉伯语文本并使用 php 将其插入到 mysql 数据库中 当打印该行时 阿拉伯语中的所有行如下所示 1 我将数据库设置为 字符集 utf8 UTF 8 Unicode 排序规则 utf8 general ci 以及数据库中的每
  • 使用复杂类型查询 Spark SQL DataFrame

    如何查询具有复杂类型 例如映射 数组 的 RDD 例如 当我编写这个测试代码时 case class Test name String map Map String String val map Map hello gt world hey
  • Zend Framework 2 - BjyAuthorize 始终拒绝访问

    我已经设置了bjyoungblood bjy authorize模块 但我目前正在得到一个403除在配置文件中配置的 URL 之外 每个 URL 都会出现 访问被拒绝 错误home route My module byjauthorize
  • 在烧瓶应用程序中保留全局状态[重复]

    这个问题在这里已经有答案了 我正在尝试将缓存字典保存在我的flask应用 据我了解 应用上下文 特别是烧瓶 g 对象应该用于此目的 Setup import flask as f app f Flask name 现在如果我这样做 with
  • 如何引用同一 appsettings.json 文件中的另一个值?

    我需要在 appsettings json 中的两个位置使用数据库连接字符串 是否可以在 json 文件中引入公共变量或 json path 相关引用以避免潜在的问题 如果能在不接触 C 代码的情况下拥有它 那就太棒了 Connection
  • 使用 sed 编辑 crontab

    我正在编写一个 sed 命令 该命令应取消注释 crontab 中的条目 有一个更好的方法吗 我想到的第一个选项是 sed Example crontab l 5 3 bash test sh sed 命令应取消注释该条目 这就是我现在所拥
  • 使用 JavaScript 更改 HTML 名称属性

    按下一个div 我把它做成了button与其他代码 我想要以下代码 div 1 br div 更改名称name w1 0 to name w1 1 我正在使用以下 JavaScript function weekclick id docum
  • 模数运算符运行第一项,然后每第三项运行

    所以我需要它在第一个循环上运行 然后在每个第三个循环上运行 if k 3 k 1 echo div class modcontainer 对我来说似乎很简单 但我不了解模数 模数返回余数 而不是布尔值 这段代码将解析为true for 1
  • 如何根据 R 中的列值范围拆分数据框?

    我有一个这样的数据集 Users Age 1 2 2 7 3 10 4 3 5 8 6 20 如何将此数据集拆分为 3 个数据集 其中第一个数据集包含年龄在 0 5 岁之间的所有用户 第二个数据集包含 6 10 岁 第三个数据集包含 11
  • 在 iOS4 中 UIWebView 播放视频损坏?

    我有一个从 SDK 2 0 版开始运行的应用程序 我在其中创建并添加 UIWebView 然后加载 mov 的 URL 来播放电影 从 4 0 beta 的早期版本到 4 0 GM 此功能已停止工作 当我现在加载电影时 出现以下错误 插件处
  • 使用 savemat 保存和加载 Python dict 会导致错误

    这是我收到的错误的一个最小示例 如果我正确理解了文档 这应该可以工作 但似乎我没有 a a test1 1 a test2 2 a test3 3 import scipy io as io io savemat temp a a b io
  • Android Instant Apps - 无法“运行未经验证的软件、运行任意本机代码”。仅即时应用程序运行时

    Android Instant Apps 文档中指出受限功能部分它不能 运行未经验证的软件 运行任意本机代码或动态加载除免安装应用运行时提供的代码之外的代码 我不完全理解上述声明 但在我看来 它可能不接受任何第三方软件或除中给出的库之外的任
  • Bash:Git 子模块 foreach?

    I have sup别名为submodule foreach git co master git up co up是别名checkout pull rebase 分别 如何添加条件 以便如果子模块名称是Libraries JSONKit 它
  • 设置 Scrapy 代理中间件在每个请求上轮换

    这个问题必然有两种形式 因为我不知道更好的解决途径 我正在爬行的网站经常将我踢到重定向的 用户被阻止 页面 但频率 按请求 时间 似乎是随机的 并且他们似乎有一个黑名单阻止了我正在使用的许多 开放 代理列表通过代理网格 所以 当 Scrap
  • Node.js - Express.js JWT 始终在浏览器响应中返回无效令牌错误

    我正在使用node js和express js快递 jwt模块 并且我设置了一个简单的 HTTP 服务器来测试所有内容 这是涉及的节点代码 app set port process env PORT 3000 app use express
  • Kubernetes - 没有选择器的服务

    我正在为没有选择器的 Kubernetes 服务而苦苦挣扎 该集群通过 kops 安装在 AWS 上 我有一个包含 3 个 nginx pod 的部署 暴露端口 80 apiVersion apps v1 kind Deployment m