【CKA、CKS篇】CKA真题解析——暴露服务 service

本文详细解析了如何在已有的Deployment front-end上添加http端口,并创建名为front-end-svc的NodePort服务,使其通过节点端口公开容器的80/tcp。包括kubectl命令操作和验证步骤,以及域名访问的演示。
摘要由CSDN通过智能技术生成

真题解析

题目

请重新配置现有的deployment front-end以及添加名为 http 的端口规范来公开现有容器 nginx 的端口 80/tcp。

创建一个名为 front-end-svc 的新 service,以公开容器端口 http。

配置此 service,以通过各个 Pod 所在的节点上的 NodePort 来公开他们。

考察点

将现有的 deployment 暴露成 nodeport 的 service 。

解析

  1. 首先需要明确的是deployment front-end已经存在,需要我们在已存在的基础上添加名称为http的端口规范。
  2. 新创建一个名称为front-end-svc 的 service 来暴露前面添加的http端口规范。
  3. service需要创建成nodeport的形式。

帮助文档

关于service可以查阅官方文档。

https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

实际操作

  1. 在已部署的deployment front-end上添加http端口规范。
kubectl edit deploy front-end
apiVersion: apps/v1
kind: Deployment
...
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: front-end
    spec:
      containers:
      - image: vicuu/nginx:hello
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
...

说明:添加公开端口规范其实就是在yaml中添加ports字段对要暴露的端口进行公开。

  1. 创建service
candidate@node01:~$ kubectl expose deploy front-end --name=front-end-svc --type=NodePort --port=80 --target-port=80
service/front-end-svc exposed
candidate@node01:~$

说明:

–type: 类型。有NodePort和ClusterIP两种。

–port:暴露的端口。

–target-port:目标端口

检查验证

  1. 检查是否创建成功
candidate@node01:~$ kubectl get svc front-end-svc -o wide
NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE    SELECTOR
front-end-svc   NodePort   10.97.80.39   <none>        80:31016/TCP   106s   app=front-end
candidate@node01:~$ kubectl get deploy front-end -o wide
NAME        READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES              SELECTOR
front-end   1/1     1            1           38d   nginx        vicuu/nginx:hello   app=front-end
candidate@node01:~$

说明:这里我们要看service的selector 标签和deployment的selector标签是否一致,如果service是<none>或者为空,需要手动编辑yaml进行修改,如下所示selector部分:

kubectl edit svc front-end-svc
apiVersion: v1
kind: Service
...
  ports:
  - nodePort: 31016
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: front-end
  sessionAffinity: None
  type: NodePort
...
  1. 检查能否访问
candidate@node01:~$ kubectl get pod,svc -o wide
NAME                                READY   STATUS    RESTARTS      AGE   IP               NODE     NOMINATED NODE   READINESS GATES
pod/11-factor-app                   1/1     Running   6 (34m ago)   38d   10.244.196.170   node01   <none>           <none>
pod/foo                             1/1     Running   6 (34m ago)   38d   10.244.140.106   node02   <none>           <none>
pod/front-end-567955846c-j8p68      1/1     Running   0             27m   10.244.140.110   node02   <none>           <none>
pod/presentation-5f64bd874c-68z8p   1/1     Running   6 (34m ago)   38d   10.244.140.107   node02   <none>           <none>

NAME                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/front-end-svc   NodePort    10.97.80.39   <none>        80:31016/TCP   16m   app=front-end
service/kubernetes      ClusterIP   10.96.0.1     <none>        443/TCP        40d   <none>
candidate@node01:~$
# curl 所在的 node 的 ip 或主机名:31016
candidate@node01:~$ curl node02:31016
Hello World ^_^
candidate@node01:~$
# curl svc 的 ip 地址:80
candidate@node01:~$ curl 10.97.80.39:80
Hello World ^_^
candidate@node01:~$
# 在容器内使用域名:80
candidate@node01:~$ kubectl exec -it front-end-567955846c-j8p68 -- /bin/bash
root@front-end-567955846c-j8p68:/# curl front-end-svc.default.svc:80
Hello World ^_^
root@front-end-567955846c-j8p68:/#

说明:

域名的形式:service名称.名称空间.svc

至此本题解析完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻啦猫@_@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值