不同命名空间中 k8s 的入口配置

2024-04-22

我需要在 azure k8s 上配置 Ingress Nginx,我的问题是是否可以在一个命名空间等中配置 ingress。 ingress-nginx 和其他命名空间中的一些服务,例如。资源? 我的文件看起来像这样:

# ingress-nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: ingress-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
      annotations:
        prometheus.io/port: '10254'
        prometheus.io/scrape: 'true' 
    spec:
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0
          args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
            - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
            - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
            - --annotations-prefix=nginx.ingress.kubernetes.io
            - --publish-service=$(POD_NAMESPACE)/ingress-nginx
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
# configmap.yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: udp-services
  namespace: ingress-nginx
---
# default-backend.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: default-http-backend
  labels:
    app: default-http-backend
  namespace: ingress-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: default-http-backend
  template:
    metadata:
      labels:
        app: default-http-backend
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: default-http-backend
        # Any image is permissible as long as:
        # 1. It serves a 404 page at /
        # 2. It serves 200 on a /healthz endpoint
        image: gcr.io/google_containers/defaultbackend:1.4
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
        ports:
        - containerPort: 8080
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
          requests:
            cpu: 10m
            memory: 20Mi
---
apiVersion: v1
kind: Service
metadata:
  name: default-http-backend
  namespace: ingress-nginx
  labels:
    app: default-http-backend
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: default-http-backend

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https
        # app-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  namespace: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
    - hosts:
      - api-sand.fake.com
  rules:
  - host: api-sand.fake.com
    http:
      paths:
      - backend:
          serviceName: api-sand
          servicePort: 80
        path: /

然后我有一些应用程序在运行资源命名空间,问题是我收到以下错误

error obtaining service endpoints: error getting service resources/api-sand from the cache: service resources/api-sand was not found

如果我将 api-sand 部署在 ingress 所在的同一命名空间中,那么该服务可以正常工作。


对于那些对 Kubernetes 及其入口选项相对陌生的人来说,我想稍微简化一下答案。要使 ingress 正常工作,需要存在 2 个独立的东西:

  1. 入口控制器: 独立DaemonSet(在所有节点上运行的控制器,包括任何未来的节点)以及Service可用于利用路由和代理。例如,它基于 NGINX,它充当老式反向代理,接收传入流量并将其转发到中定义的 HTTP(S) 路由。Ingress下面第 2 点中的资源(通过不同的路由/URL 来区分);
  2. 入口规则:分离 Kubernetes 资源kind: Ingress。仅当 Ingress Controller 已存在时才会生效deployed https://kubernetes.io/docs/concepts/services-networking/ingress/#prerequisites在该节点上。

While Ingress Controller 可以部署在任何命名空间中它通常部署在与您的应用程序服务分开的命名空间中(例如ingress or kube-system)。它可以看到Ingress所有其他命名空间中的规则并选择它们。然而,每个入口规则必须驻留在它们配置的应用程序所在的命名空间中。

有一些解决方法,但这是最常见的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同命名空间中 k8s 的入口配置 的相关文章

随机推荐

  • Masonry 插件:调整 div 大小不会导致重新洗牌

    将 Masonry 项目包裹在 1000px 宽的 div 中 我有一个按钮可以使用 jQuery 将 div 大小调整为 2000xaddClass 问题是 Masonry 不会重新排列项目来填充额外的 1000px 空间 我知道调整大小
  • PageViewController - 将变量传递给子视图

    我拥有的 我有一个 ViewController TutorialViewController 和一个 UIPageViewController TutorialPageViewController 故事板上还有 3 个带有 StoryBo
  • Paramiko 和伪 tty 分配

    我正在尝试使用 Paramiko 连接到远程主机并执行许多文本文件替换 i o e client exec command perl p i e s initial replaced g conf 其中一些命令需要作为 sudo 运行 这会
  • 用于创建工作项模板的 TFS 客户端 API?

    当然 很可能在 TFS 中创建工作项 获取工作项列表等 除此之外 我们还需要具有允许用户为各种文件类型创建自己的工作项模板的功能 TFS 客户端 API 是否能够将工作项模板上传到 TFS 服务器 有一种方法可以获取 XML 定义 Micr
  • 在函数内调用 div

    我正在尝试使用 jQuery mobile 1 4 3 创建一个类似于 iOS 警报视图的弹出窗口 我需要从 javascript 事件触发警告消息 例如带有 确定 按钮的确认消息 显示对 Web 服务的 ajax 响应调用 我的第一个问题
  • # jquery移动页面url中的字符

    为什么当我访问我的 jQuery 移动页面时 假设 page php 显示正常 但当我访问同一页面 page php someDetailsHere 时 它 只显示一个白色页面 我该如何解决这个问题 我使用第三方应用程序重定向到我的网页 添
  • 通过 Kafka 消费者重试维持订单保证

    我正在为基于 Kafka 的数据处理管道中的消费者重试设计一个架构 我们正在使用 Kafka 生产者和消费者 并且正在考虑重试主题 如果消费出错 将在这些主题上发送消息 将会有消费者以一定的节奏运行这些重试主题 我读了很多参考架构 但没有一
  • 渲染图表后,从图表对象更改 Highcharts 工具提示格式化程序

    我发现我可以使用 setData 更改系列 并且我知道我可以使用 setExtremes 修改最大值 但我无法弄清楚如何从图表对象设置工具提示格式化程序 我如何更新该字段 如果我有一个图表对象 如何更新其工具提示格式化程序属性 以及plot
  • 如何让我的收据不再重复

    这是一个程序 要求用户输入条形码 然后我的程序找到指定的产品 询问用户他们想要购买多少产品 如果他们想继续 计算总价 然后假设打印出收据 但是我的问题是收据重复其值并且没有四舍五入到小数点后两位 press 0 to stop shoppi
  • 如何在postgreSQL命令中指示在哪个数据库中执行脚本? (类似于SQL Server“use”命令)

    我有以下问题 我需要放入一个在新版本推出之前运行的脚本 该脚本在 PostgreSQL 中启用 pgAgent 的 SQL 代码 但是 此代码应该在维护数据库 postgres 上运行 而我们运行脚本文件的数据库是另一个数据库 我记得在 S
  • 如何检测视频标签上播放的视频的帧速率?

    有什么方法可以通过 javascript 检测视频 html5 标签中引用的视频的帧速率是多少 我还在寻找比特率和编解码器信息 因为 html5 视频播放器与编解码器无关 thanks FPS 存储在video文件的标题 这是您正在寻找的实
  • 使用 Swift array.count 和 arc4random()

    为了让这段代码正常工作 我缺少什么 NodesLeft 是一个 Int let x nodesLeft count let r Int arc4random uniform x 我收到错误 Playground 执行失败 错误 136 40
  • Javascript:在数组末尾重新启动一次循环

    我最近遇到了这个问题 但在任何地方都找不到好的答案 因此有这个问题 我想在到达终点后重新启动循环 但只循环有限的次数 在这个特定的上下文中 我一周中有一系列天 我想使用以下命令显示从今天开始的接下来 7 天的日期名称Date getDay
  • 为什么 C++ 编译器对许多大括号的处理方式不同?

    在下面的 C 20 程序中 我错误地添加了一对额外的弯曲大括号 in B A include
  • 如何在样式组件中访问 Material-ui 的主题

    我将 CRA 与 Material ui 和 Styled Components 类型的样式一起使用 在构建 CSS 时 我想访问 Material ui 的默认主题 package json 的一部分 dependencies react
  • 两点层之间的距离矩阵

    我有两个数组 其中包含不同大小的点坐标 shapely geometry Point Eg Point X Y Point X Y Point X Y Point X Y 我想用距离函数创建这两个数组的 叉积 距离函数来自shapely g
  • RETROFIT 如何解析此响应

    我正在尝试解析这个 json 响应雅虎YQL http chartapi finance yahoo com instrument 1 0 goog chartdata type quote range 1d json使用 Retrofit
  • 如何使用 Chromium 发送帖子和标题数据?

    我正在尝试将一些代码从 TWebBrowser 转换为 Chromium 但无法弄清楚如何使用 HTTP 请求发送帖子和标头数据 下面是我正在尝试实现的 TWebBrowser 功能 var VHeader PostData OleVari
  • 如何为产品类别设置 SQL 表结构?

    我对 SQL 还很陌生 目前正在尝试用 PHP 和 MySql 制作一个简单的产品页面 现在我有一个products有我的产品的表id name price and stock 编辑 样本products tables id name pr
  • 不同命名空间中 k8s 的入口配置

    我需要在 azure k8s 上配置 Ingress Nginx 我的问题是是否可以在一个命名空间等中配置 ingress ingress nginx 和其他命名空间中的一些服务 例如 资源 我的文件看起来像这样 ingress nginx