【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1

这篇具有很好参考价值的文章主要介绍了【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

正文

  • 使用Service 连接到应用
  • 在 Kubernetes 集群外用 Service 暴露应用

一、什么是Kubernetes Service

在上一节中,我们学习到了pod 的生命周期,当一个工作 Node 挂掉后, 在 Node 上运行的 Pod 也会消亡。 ReplicaSet 会自动地通过创建新的 Pod 驱动集群回到目标状态,以保证应用程序正常运行。

Kubernetes 中的服务(Service)是一种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。Service 使从属 Pod 之间的松耦合成为可能。 和其他 Kubernetes 对象一样, Service 用 YAML (更推荐) 或者 JSON 来定义 Service 下的一组 Pod 通常由 LabelSelector 来标记。

尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在集群外部。Service 允许你的应用程序接收流量。Service 也可以用在 ServiceSpec 标记type的方式暴露

  • ClusterIP (默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
  • NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用<NodeIP>:<NodePort> 从集群外部访问 Service。是 ClusterIP 的超集。
  • LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集。
  • ExternalName - 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。

二、使用 Service 连接到应用

Kubernetes 假设 Pod 可与其它 Pod 通信,不管它们在哪个主机上。 Kubernetes 给每一个 Pod 分配一个集群私有 IP 地址,所以没必要在 Pod 与 Pod 之间创建连接或将容器的端口映射到主机端口。 这意味着同一个 Pod 内的所有容器能通过 localhost 上的端口互相连通,集群中的所有 Pod 也不需要通过 NAT 转换就能够互相看到。

2.1、在集群中暴露 Pod

首先我们先启动一个项目,具体的启动方式,我们前面都讲过了,在这里就不多做赘述。

  1. 项目运行之后,打开Kubernetes 仪表板(Dashboard),点击右上角的号,使用YAML 的方式,创建一个pod 节点。

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

  1. 如上图所示,在YAML 中添加如下代码:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

  1. 点击上传,再次点击左侧列表栏的pod 选项,就回到了我们之前 所熟悉的pod 页面。

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

当然,我们也可以直接使用命令行的方式,来检查我们的节点:

$ kubectl apply -f ./run-my-nginx.yaml

如果报以下错误的话:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

直接执行命令:

$ unset KUBECONFIG

再次执行:

$ kubectl apply -f ./run-my-nginx.yaml
$ kubectl get pods -l run=my-nginx -o wide

执行结果输出节点如下:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

当然,我们也可以使用命令行,检查pod 的IP地址:

$ kubectl get pods -l run=my-nginx -o yaml | grep podIP

输出当前节点IP:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

我们能够通过 ssh 登录到集群中的任何一个节点上,并使用诸如 curl 之类的工具向这两个 IP 地址发出查询请求。 需要注意的是,容器不会使用该节点上的 80 端口,也不会使用任何特定的 NAT 规则去路由流量到 Pod 上。 这意味着可以在同一个节点上运行多个 Nginx Pod,使用相同的 containerPort,并且可以从集群中任何其他的 Pod 或节点上使用 IP 的方式访问到它们。

2.2、创建 Service

上面创建了一个扁平的、集群范围的地址空间中运行 Nginx 服务的 Pod ,要想把它暴露出去,我们还需要创建一个Service。

Kubernetes Service 是集群中提供相同功能的一组 Pod 的抽象表达。 当每个 Service 创建时,会被分配一个唯一的 IP 地址(也称为 clusterIP)。 这个 IP 地址与 Service 的生命周期绑定在一起,只要 Service 存在,它就不会改变。 可以配置 Pod 使它与 Service 进行通信,Pod 知道与 Service 通信将被自动地负载均衡到该 Service 中的某些 Pod 上。

直接使用 命令给 上面的 Nginx 副本创建一个 Service:

$ kubectl expose deployment/my-nginx
$ service/my-nginx exposed

当然,我们也可以直接使用YAML 方式去创建,创建方式和上面创建pod 的一样,可以直接使用如下代码:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    run: my-nginx

此时点击左侧菜单栏中的Serverces,你会看到当前Serverces 的详细信息:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

上面我们创建的 Service 会将所有具有标签 run: my-nginx 的 Pod 的 TCP 80 端口暴露到一个抽象的 Service 端口上(targetPort:容器接收流量的端口;port:可任意取值的抽象的 Service 端口,其他 Pod 通过该端口访问 Service)。

现在,我们执行下面的命令查看Service 资源:

$ kubectl get svc my-nginx

资源输出如下图所示:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

前面我也提到,一个 Service 由一组 Pod 提供支撑。这些 Pod 通过 endpoints 暴露出来。 Service Selector 将持续评估,结果被 POST 到一个名称为 my-nginxEndpoint 对象上。 当 Pod 终止后,它会自动从 Endpoint 中移除,新的能够匹配上 Service Selector 的 Pod 将自动地被添加到 Endpoint 中。 检查该 Endpoint,注意到 IP 地址与在第一步创建的 Pod 是相同的。

$ kubectl describe svc my-nginx

执行上面的命令,我们可以得到当前serverces 的所有信息:

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

$ kubectl get ep my-nginx

现在,我们执行上面的命令,就可以暴露我们的service了,执行结果如下:

NAME ENDPOINTS AGE
my-nginx 172.17.0.3:80,172.17.0.8:80 23m

现在我们就能够从集群中任意节点上使用 curl 命令向 <CLUSTER-IP>:<PORT> 发送请求以访问 Nginx Service。

2.3、访问 Service

Kubernetes支持两种查找服务的主要模式: 环境变量和 DNS。这里我将只介绍环境变量的查找方式。

当 Pod 在节点上运行时,kubelet 会针对每个活跃的 Service 为 Pod 添加一组环境变量。 这就引入了一个顺序的问题。为解释这个问题,让我们先检查正在运行的 Nginx Pod 的环境变量。

我个人的环境变量是 my-nginx-cf54cdbf7-vr96x 你的可能会和我的不一样,直接在pod 中查看直接的环境变量。

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

接下来执行命令:

$ kubectl exec my-nginx-cf54cdbf7-vr96x – printenv | grep SERVICE

运行结果如下:

KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443

能看到环境变量中并没有你创建的 Service 相关的值。这是因为副本的创建先于 Service。 这样做的另一个缺点是,调度器可能会将所有 Pod 部署到同一台机器上,如果该机器宕机则整个 Service 都会离线。 要改正的话,我们可以先终止这 2 个 Pod,然后等待 Deployment 去重新创建它们。 这次 Service 会先于副本存在。这将实现调度器级别的 Pod 按 Service 分布(假定所有的节点都具有同样的容量),并提供正确的环境变量。

分别执行如下两行命令:

$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=2;
$ kubectl get pods -l run=my-nginx -o wide

【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

你可能注意到,Pod 具有不同的名称,这是因为它们是被重新创建的。

现在我们再次执行Nginx Pod 环境变量命令,注意:现在你的环境变量又变了,请验证:

$ kubectl exec my-nginx-cf54cdbf7-fhghk – printenv | grep SERVICE

终于,我们在运行结果中,看到了Service 相关的值:

KUBERNETES_SERVICE_PORT_HTTPS=443
MY_NGINX_SERVICE_HOST=10.97.238.70
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
MY_NGINX_SERVICE_PORT=80

2.4、保护 Service

到现在为止,我们只在集群内部访问了 Nginx 服务器。在将 Service 暴露到因特网之前,我们希望确保通信信道是安全的。 为实现这一目的,需要:

  • 用于 HTTPS 的自签名证书(除非已经有了一个身份证书)
  • 使用证书配置的 Nginx 服务器
  • 使 Pod 可以访问证书的 Secret

我们可以直接通过手动执行步骤执行操作下列命令:

$ make keys KEY=/tmp/nginx.key CERT=/tmp/nginx.crt
$ kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt
$ secret/nginxsecret created
$ kubectl get secrets

输出结果如下:

NAME TYPE DATA AGE
default-token-t7mbb kubernetes.io/service-account-token 3 56m

以下是 configmap:

$ kubectl create configmap nginxconfigmap --from-file=default.conf
$ configmap/nginxconfigmap created
$ ubectl get configmaps

输出结果如下:

NAME DATA AGE
kube-root-ca.crt 1 58m

以下是你在运行 make 时遇到问题时要遵循的手动步骤(例如,在 Windows 上):

# 创建公钥和相对应的私钥
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /d/tmp/nginx.key -out /d/tmp/nginx.crt -subj "/CN=my-nginx/O=my-nginx"
# 对密钥实施 base64 编码
cat /d/tmp/nginx.crt | base64
cat /d/tmp/nginx.key | base64

使用前面命令的输出来创建 yaml 文件,如下所示。 base64 编码的值应全部放在一行上。

apiVersion: "v1"
kind: "Secret"
metadata:
  name: "nginxsecret"
  namespace: "default"
type: kubernetes.io/tls  
data:
  tls.crt: "这里放你的编码"
  tls.key: "这里放你的编码"

现在使用文件创建 Secret:

$ kubectl apply -f nginxsecrets.yaml
$ kubectl get secrets

执行结果:

NAME TYPE DATA AGE
default-token-t7mbb kubernetes.io/service-account-token 3 62m

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1,2024年程序员学习,kubernetes,安全,贪心算法

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!文章来源地址https://www.toymoban.com/news/detail-860516.html

t:

$ kubectl apply -f nginxsecrets.yaml
$ kubectl get secrets

执行结果:

NAME TYPE DATA AGE
default-token-t7mbb kubernetes.io/service-account-token 3 62m

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-jkQPoBEa-1713345884842)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

到了这里,关于【Kubernetes 系列】一文学会Kubernetes Service安全的暴露应用_apiversion apps v1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Service Mesh和Kubernetes:加强微服务的通信与安全性

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容: 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 Kubernetes已经成为云原生应用程序的事实标准,它为容器编排和管

    2024年02月08日
    浏览(43)
  • 45了解容器编排工具 Kubernetes 的基本概念和应用,包括 Pod、Service

    Kubernetes 是一种用于自动部署、扩展和管理容器化应用程序的开源容器编排工具。它可以轻松地管理和编排应用程序容器,确保它们在大规模的云环境中高效、可靠地运行。本教程将介绍 Kubernetes 的基本概念和应用,包括 Pod 和 Service。 Pod 是 Kubernetes 中最小的可部署对象,是

    2024年02月08日
    浏览(43)
  • 【云原生 | Kubernetes 系列】项目实战 一文吃透 Docker Compose 文件转换成 Kubernetes 资源

    Kompose 是什么?它是个转换工具,可将 compose(即 Docker Compose)所组装的所有内容 转换成容器编排器(Kubernetes 或 OpenShift)可识别的形式。 其实有很多种方式安装 Kompose。这里只讲解如何从最新的 GitHub 发布页面下载二进制文件。 首先需要把 Docker Compose 带到 Kubernetes。 只需要

    2023年04月11日
    浏览(45)
  • Kubernetes 秘密暴露使大型区块链公司面临风险

    领先的网络安全专家对公开的 Kubernetes 配置表示担忧,这可能会威胁许多组织供应链的安全。 受影响的公司包括两家主要的区块链公司(出于安全原因,其名称已被隐去)以及其他多家财富 500 强公司。 Aqua Security 研究人员报告称,加密的 Kubernetes 配置数据已上传到公共存储

    2024年02月04日
    浏览(39)
  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据

    前面我们已经一起学习了很多的东西了,本篇文章,我们将一起学习,如何给应用注入数据,当然,本篇文章不会讲解全部知识点,而是带领大家,一起学习如何对我们的项目进行相关的配置和设置。 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要

    2024年02月02日
    浏览(70)
  • 【宝藏系列】一文带你了解STM32内置的硬件功能安全属性

    对于功能安全,ST MCU 从芯片内置的硬件安全属性,经过认证的软件自检库和完备的安全文档三个层面来支持STM32用户在系统级进行开发,达到要求的功能安全等级。 下表中列出了STM32MCU内置的一些主要硬件安全属性。下面我们一起来看看这些属性在功能安全中的用处。 🌸🌸

    2024年02月10日
    浏览(36)
  • 【云原生 • Kubernetes】kubernetes 核心技术 - Service

    1. Service 的定义 Service 是 Kubernetes 的核心概念之一,创建一个 Service 可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 完整 yaml 格式的 Service 定义文件如下: 2. Service 的基本用法 一般情况下,对外部提供服务的应用

    2024年02月01日
    浏览(39)
  • 一文读懂区块链隐私技术系列之佩德森承诺(Pedersen Commitment)以及应用

    佩德森承诺是一种密码算法,它允许验证者在不暴露或无法更改某个值的情况下提交该值。 CT( Confidential Transactions,机密Tx)的基础密码学工具是佩德森的承诺。 承诺场景让你把一段数据作为私密保存,但是要承诺它,使得你后来不能改变该数据。一个简单的承诺场景用哈

    2024年02月02日
    浏览(50)
  • 网络安全之互联网暴露资产端口

    互联网暴露资产因直接向公众互联网开放,极易遭受来自外部组织或人员的入侵与攻击,是风险管控的高危区域。 作为企业的安全管理,互联网暴露资产的管理是非常重要的一环。应该建立规范的流程严控互联网暴露端口的审批,对互联网暴露出口应尽量缩减收敛减少暴露面

    2024年02月08日
    浏览(55)
  • Kubernetes Service的过程

    在了解Service之前,需要先了解一些额外的知识: 命令: ip route show table all DNAT IPVS和iptables 基础的网络知识(网关,网段或子网,转发) 1. 命令 ip route show table all 这条命令会列出主机内所有的路由.内容展示包含了对应的网段或者IP,要通过那个虚拟设备发送出去.示例: 摘取一条,比如:

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包