[CKA备考实验][ingress-nginx] 4.2 集群外访问POD

news2025/2/23 7:29:34

1.创建Deployments

部署方法请参照:
https://blog.csdn.net/qq_33868661/article/details/127505429?spm=1001.2014.3001.5501

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: deploy1
  annotations:
    name: deploy1
  name: deploy1
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy1
  strategy: {}
  template:
    metadata:
      labels:
        app: deploy1
    spec:
      containers:
      - image: nginx:1.23
        name: nginx
        resources: {}
root@node-1:~/service# kubectl get pods -o wide 
NAME                       READY   STATUS    RESTARTS      AGE     IP              NODE     NOMINATED NODE   READINESS GATES
deploy1-5b5f4bd5dd-4bbsm   1/1     Running   1 (44h ago)   7d21h   10.200.139.96   node-3   <none>           <none>
deploy1-5b5f4bd5dd-bjgwq   1/1     Running   1 (44h ago)   7d21h   10.200.139.97   node-3   <none>           <none>
deploy1-5b5f4bd5dd-l7wc7   1/1     Running   2 (43h ago)   7d21h   10.200.247.48   node-2   <none>           <none>

2.根据Deployments创建Service

部署方法请参照:
https://blog.csdn.net/qq_33868661/article/details/127505429?spm=1001.2014.3001.5501

apiVersion: v1
kind: Service
metadata:
  labels:
    name: deploy1
  name: deploy1
  namespace: default
spec:
  clusterIP: 10.96.0.200
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: deploy1
  type: ClusterIP
root@node-1:~/service# kubectl get svc -o wide 
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE     SELECTOR
deploy1      ClusterIP   10.96.0.200   <none>        80/TCP         6d22h   app=deploy1

记住这里的Endpoints信息,它们很重要

root@node-1:~/service# kubectl describe deploy1
error: the server doesn't have a resource type "deploy1"
root@node-1:~/service# kubectl describe svc deploy1
Name:              deploy1
Namespace:         default
Labels:            name=deploy1
Annotations:       <none>
Selector:          app=deploy1
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.96.0.200
IPs:               10.96.0.200
Port:              80-80  80/TCP
TargetPort:        80/TCP
Endpoints:         10.200.139.96:80,10.200.139.97:80,10.200.247.48:80
Session Affinity:  None
Events:            <none>

3.借助Service的Endpoints创建Ingress

重要的事情原则:

Ingress并没有将信息交给Service来处理

Ingress并没有将信息交给Service来处理

Ingress并没有将信息交给Service来处理

Ingress只是借助Service生成的Endpoints来获取容器的地址信息,转发的动作还是直接由Ingress施加给Pod

3.1 ingress-controller配置文件修改

创建Ingress之前需要修改ingress-controller的配置文件。修改点在Deployment对象下,与container统计别处增加配置 hostNetwork: true

这个修改的目的在于让ingress-controller获得worker节点的IP地址作为容器的IP地址,这样我们才能在集群外访问容器

# 配置文件的名字:ingress-nginx-140.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.4.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  minReadySeconds: 0
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
    spec:
      containers:
      - args:
        - /nginx-ingress-controller
        - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
        ......
      dnsPolicy: ClusterFirst
      hostNetwork: true
      nodeSelector:
        kubernetes.io/os: linux
      serviceAccountName: ingress-nginx
      terminationGracePeriodSeconds: 300
      volumes:
      - name: webhook-cert
        secret:
          secretName: ingress-nginx-admission

3.2 创建ingerss-controller的容器

$ kubectl apply -f ingress-nginx-140.yaml

此时需要检查一下ingress-controller容器的状态和地址信息,尤其要关注ingress-controller的IP地址是否为其中一个worker节点的IP地址(pod会运行在哪个节点上不好说)

root@node-1:~# kubectl get pod -n ingress-nginx -o wide
NAME                                        READY   STATUS      RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-tjbcx        0/1     Completed   0          18h   10.200.247.56    node-2   <none>           <none>
ingress-nginx-admission-patch-65q84         0/1     Completed   0          18h   10.200.139.103   node-3   <none>           <none>
ingress-nginx-controller-75bb94498d-ltvch   1/1     Running     0          18h   222.1.1.22       node-2   <none>           <none>

从检查结果上看ingress-controller运行在了节点2上,分配到的IP地址为节点2的IP地址,符合预期

3.3 创建一个Ingress实例

创建过程跟pod、deployments、service等其他资源对象大同小异,只要在配置文件中定义kind为Ingress,然后在spec中加入一些7层代理相关的配置

# ingress1.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: deploy1
spec:
  ingressClassName: nginx
  rules:
  - host: ingress.example1.com
    http:
      paths:
      - backend:
          service:
            name: deploy1
            port:
              number: 80
        path: /
        pathType: Exact

注意ingressClassName这个配置需要我们自己添加上去,该配置并没有默认选项

下面着重解释一下rules中的重要配置信息:

  • host:rules中需要定义用于访问的主机名,这里是ingress.example1.com
  • service:这里要关联我们的目标service,再次重申ingress不将请求信息转发给service来处理,它只是借用了service的endpoints
  • path:这个是可以添加在主机名后面的后缀信息,针对不同的后缀,ingress可以将请求转发到指定的Pod(pod地址信息将由service来提供)
  • pathType:这里的Exact表明ingress只能精确匹配host+path做转发,如果是prefix的话则支持“匹配主机名前缀”

kubectl apply -f <ingress.yaml> 来创建ingress实例,随后查询生成的ingress

$ kubectl apply -f ingress1.yaml
root@node-1:~/ingress# kubectl get ingress -o wide
NAME      CLASS   HOSTS                  ADDRESS   PORTS   AGE
deploy1   nginx   ingress.example1.com             80      17h
root@node-1:~/ingress# kubectl describe ingress 
Name:             deploy1
Labels:           <none>
Namespace:        default
Address:      
Ingress Class:    nginx
Default backend:  <default>
Rules:
  Host                  Path  Backends
  ----                  ----  --------
  ingress.example1.com  
                        /   deploy1:80 (10.200.139.96:80,10.200.139.97:80,10.200.247.48:80)
Annotations:            <none>
Events:                 <none>

从ingress的描述信息中可以看出,ingress.example1.com有一个path,也就是’/’ 对应着Service指向的三个地址,这三个地址就是目标pod的IP地址,ingress将直接将请求转发给这些IP地址

3.4 检验ingress的功能

我们的测试环境运行在PC的虚拟机上,需要在PC上增加一个DNS解析条目

增加位置在windows的hosts配置文件中,修改内容如下

在这里插入图片描述

增加一条记录

222.1.1.22 ingress.example1.com

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
222.1.1.24     harbor.example.com
222.1.1.22     ingress.example1.com

现在我们就可以在PC的浏览器上通过域名来访问集群中的Pod了,在地址栏输入http://ingress.example1.com/
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

要么干要么滚!推特开始裁员了;深度学习产品应用·随书代码;可分离各种乐器音源的工具包;Transformer教程;前沿论文 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f4c6;电子月刊 | &#x1f369;韩信子 &#x1f4e2; 解散Twitter董事会&#xff0c;代码审查&#xff0c;裁员25%&#xff0c;收每月20美元认证费马斯克那些骚操作 埃隆马斯克 (Elon Musk) 抱着洗手池入主 Twitter 后&#xff0c;狂风骤雨已…

STM32入门——uKeil5 MDK 的使用(基于固件库)

文章目录1 Keil uVision5 MDK 是什么2 建立一个标准库函数工程2.1 前期准备2.2 建立工程2.3 建立组文件夹2.4 添加文件2.4 配置“魔术棒”选项卡2.5 建立 main 函数1 Keil uVision5 MDK 是什么 Keil 软件是一种统称&#xff0c;它包含编辑器、编译器、链接器、调试器等众多工具…

冰冰学习笔记:二叉搜索树

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

堆外内存和堆内内存及虚引用的应用

目录 内存区域划分&#xff1a; 元空间 程序计数器 直接内存 对象的创建 对象的访问定位 判断对象是否存活 堆外内存 堆内内存的缺点以及引入堆外内存 为什么需要堆外内存&#xff1f; 如何分配堆外内存&#xff1f; 如何回收堆外内存&#xff1f; 1) System.gc()…

C语言函数章--第二弹(让冤种室友用你的函数,但不给他看函数源码)

前言 &#x1f496;作者&#xff1a;龟龟不断向前 ✨简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; 刷题&#xff1a; 牛客网 leetcode笔记软件&#xff…

Error注入攻击

&#x1f4aa;&#x1f4aa;Error注入攻击1.创建漏洞环境2.漏洞攻击2.1判断是否有注入2.2信息收集2.3注入获取数据库名2.4注入获取表名2.5注入获取列名2.6注入获取信息3.sql靶场实战1.创建漏洞环境 &#x1f4aa;&#x1f4aa;第一步创建sql环境&#xff0c;直接再mysql下运行 …

Flutter——软件安装与环境配置

Flutter入门官网Flutter SDK下载创建Flutter项目在ios上运行第一个Flutter项目效果图代码总结官网 Flutter开发手册网址如下 Flutter SDK下载 下载地址 第一步&#xff1a;进入官网&#xff0c;选择自己相对应的系统 第二步&#xff1a;选择对应版本SDK并下载到本地 创建Flu…

electron调用dll文件

Electron 对系统层能力的使用可能比较弱&#xff0c;此时需要求助 Python、C、C# 等语言&#xff0c;通过 ffi-napi 库可以让 Node.js 使用 C dll&#xff0c;通过 electron-edge-js 库可以让 Node.js 使用 C# dll 1. 先确定dll文件是用什么语言写的. 使用peid 应用查看- 这个…

【Transformers】第 2 章:主题的实践介绍

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Node.js | 基于 MongoDB 的简易用户管理系统

&#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f5a5;️ TypeScript知识总结&…

C++秋招经验贴

文章目录一、个人背景及秋招情况1.个人背景2.秋招情况二、求职C强相关开发岗位的准备过程以及一些建议1. 八股2. 力扣刷题3. 实习4. 项目三、总结一、个人背景及秋招情况 1.个人背景 本科&#xff1a;二本&#xff0c;材料专业   硕士&#xff1a;211硕&#xff0c;光学工程…

TI IWR1642毫米波雷达使用串口原始数据采集与分析

本文编辑&#xff1a;调皮哥的小助理 1.引言 如果文章能够给你带来价值&#xff0c;希望能够关注我。 如果文章能够让你学习到知识&#xff0c;希望你能够点个赞&#xff01; 好了下面开始今天的学习内容吧。 今天给大家分享的是 《TI 的IWR1642毫米波雷达使用串口原始数据…

深度学习入门(十五)环境和分布偏移(了解)

深度学习入门&#xff08;十五&#xff09;环境和分布偏移前言环境和分布偏移教材1 分布偏移的类型1.1 协变量偏移1.2 标签偏移1.3 概念偏移2 分布偏移示例2.1医学诊断2.2 自动驾驶汽车2.3 非平稳分布2.4 更多轶事3 分布偏移纠正3.1 经验风险与实际风险3.2 协变量偏移纠正3.3 标…

MATLAB | 一起来感受数学之美叭

前两天去观摩了MATHWORKS官方举办的Mathematics is beautiful数学之美投票比赛&#xff0c;见到了很多非常惊艳的作品&#xff0c;在这里分享给大家让大家一同感受大神们的创造力&#xff0c;接下来由我来做全程解说。 虽然看起来代码都写好了&#xff0c;&#xff0c;&#x…

程序员眼中看到的网页是如何制作出来的?

一、认识网页 在学习之初&#xff0c;我们需要认识一下网页的概念&#xff0c;因为网页与我们的 html是息息相关的。 那么接下来我们来看一下&#xff0c;我们经常去通过浏览器查看的网页&#xff0c;它的本质是什么&#xff1f;在此我们需要去做一个对比。我们眼中看到的网页…

聚类算法概要及相关知识准备

聚类的概念 聚类分析是在数据中发现数据对象之间的关系&#xff0c;将数据进行分组&#xff0c;组内的相似性越大&#xff0c;组间的差别越大&#xff0c;则聚类效果越好。 将物理或抽象对象的集合分成由类似对象组成的多个类或簇&#xff08;cluster&#xff09;的过程被称为…

SpringBoot+Vue的社区疫情防控管理系统|基于Python+Django的社区物资采购系统

&#x1f496;&#x1f496;作者&#xff1a;IT跃迁谷毕设展 &#x1f499;&#x1f499;个人简介&#xff1a;曾长期从事计算机专业培训教学&#xff0c;本人也热爱上课教学&#xff0c;语言擅长Java、微信小程序、Python、Golang、安卓Android等。平常会做一些项目定制化开发…

Cookie使用详解

Cookie使用详解 目录Cookie使用详解理论知识前言创建Cookiecookie 的属性介绍name 、valuedomainpathExpires 、Max-AgeSameSiteSecure&#xff0c;HttpOnlyCookie与跨域、安全知识点小结实践相关配置修改代码实践实验过程记录其它小结理论知识 前言 HTTP Cookie&#xff08;…

使用Charles和iPhone进行微信小程序抓包详解

基于工作原因&#xff0c;需要对一款微信小程序进行测试。本次任务是纯黑盒方式&#xff0c;所以只有通过抓包的方式找到接口及参数列表&#xff0c;再逐一进行功能和性能测试。 一、使用工具 网络抓包工具&#xff1a;Charles 设备&#xff1a;iPhone6s&#xff0c;iPhone1…

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(8)

文章目录前期准备1. 将收盘价5日均线&#xff0c;20日均线与原始数据绘制在同一个图上2. 按周为采样规则&#xff0c;取一周收盘价的最大值3. 绘重制采样数据与原始数据4. 将数据往后移动5天、5. 将数据向前移动5天6. 使用expending函数计算开盘价的移动窗口的均值7. 绘制上一题…