k8s笔记 | Service 服务

创建nginx-deploy.yaml 【上节课的内容】

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    type: nginx-deploy
    test: 1.0.0
  namespace: default
spec:
  replicas: 2 # 副本数
  revisionHistoryLimit: 10 # 保留的历史版本数
  selector: # 选择器
    matchLabels:
      app: nginx-deploy
      test: 1.0.0
  strategy: # 更新策略
    type: RollingUpdate # 更新策略类型 RollingUpdate、Recreate
    rollingUpdate:
      maxUnavailable: 25% # 更新时最大不可用副本数
      maxSurge: 25% # 更新时最大超出副本数
  template: # 模板
    metadata:
      labels:
        app: nginx-deploy
        test: 1.0.0
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          resources:
            requests:
              cpu: 50m
              memory: 128Mi
            limits:
              cpu: 50m
              memory: 128Mi
      restartPolicy: Always # 重启策略
      terminationGracePeriodSeconds: 30 # pod被删除时的等待时间

# 创建
kubectl create -f nginx-deploy.yaml

创建nginx-svc.yaml 【上节课的内容】

复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  labels:
    app: nginx
spec:
  selector:
    app: nginx-deploy
  ports:
    - port: 80
      targetPort: 80
      name: web
  type: NodePort

# 创建
kubectl create -f nginx-svc.yaml

# 查看pod信息
get po -l app=nginx-deploy -o wide

# 结果
NAME                            READY   STATUS    RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
nginx-deploy-5666fcbb6b-6k8mw   1/1     Running   0          5m6s   10.244.107.241   k8s-node3   <none>           <none>
nginx-deploy-5666fcbb6b-h2w4l   1/1     Running   0          5m6s   10.244.122.95    k8s-node4   <none>           <none>

# 查看endpoint
kubectl get ep

#结果
kubernetes   192.168.10.100:6443                  5d19h
nginx-svc    10.244.107.241:80,10.244.122.95:80   6m48s

通过服务名进行访问

复制代码
# 创建其他的pod通过 service name进行访问(推荐)
kubectl exec -it dns-test -- sh 
wget  http://nginx-svc

# 通过服务名+命名空间
wget  http://nginx-svc.default

代理k8s外部服务

  1. 创建一个没有选择器的服务,不指定seletor;作用是内部访问外网

  2. 自己创建endpoint

nginx-svc-external.yaml

复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-external
  labels:
    app: nginx
spec:
  ports:
    - port: 80
      targetPort: 80
      name: web
  type: ClusterIP

# 部署
kubectl create -f nginx-svc-external.yaml


# 查看服务
[root@k8s-master services]# kubectl get svc
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes           ClusterIP   10.96.0.1        <none>        443/TCP        5d19h
nginx-svc            NodePort    10.104.51.98     <none>        80:30539/TCP   20m
nginx-svc-external   ClusterIP   10.103.145.219   <none>        80/TCP         7s

# endpoint
[root@k8s-master services]# kubectl get ep
NAME         ENDPOINTS                            AGE
kubernetes   192.168.10.100:6443                  5d19h
nginx-svc    10.244.107.241:80,10.244.122.95:80   20m

# 创建endpoint  nginx-ep-external.yaml

apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: nginx # 与service一致
  name: nginx-svc-external # 与service一致
  namespace: default # 与service一致
subsets:
  - addresses:
      - ip: 120.78.159.117 #目标服务ip
    ports:
      - name: web
        port: 80
        protocol: TCP



# 创建+查看
[root@k8s-master services]# touch nginx-ep-external.yaml
[root@k8s-master services]# kubectl create -f nginx-ep-external.yaml 
endpoints/nginx-svc-external created
[root@k8s-master services]# kubectl get ep
NAME                 ENDPOINTS                            AGE
kubernetes           192.168.10.100:6443                  5d19h
nginx-svc            10.244.107.241:80,10.244.122.95:80   27m
nginx-svc-external   120.78.159.117:80                    5s


# 测试访问

kubectl exec -it dns-test -- sh

wget http://nginx-svc-external

# 测试成功
/ # wget http://nginx-svc-external
Connecting to nginx-svc-external (10.103.145.219:80)
Connecting to www.wolfcode.cn (120.78.159.117:80)
Connecting to www.wolfcode.cn (120.78.159.117:443)
index.html           100% |***

方向代理外部域名

创建一个service的配置文件

nginx-svc-domain.yaml

复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-domain
  labels:
    app: nginx-svc-domain
spec:
  type: ExternalName
  externalName: www.wolfcode.cn

测试效果

复制代码
# 进入终端
kubectl exec -it dns-test -- sh

# 删除之前的index.html
rm -rf index.html

# 测试
wget nginx-svc-domain

# 结果
wget wolfcode-svc-domain
wget: bad address 'wolfcode-svc-domain'
/ # wget nginx-svc-domain
Connecting to nginx-svc-domain (120.78.159.117:80)
Connecting to www.wolfcode.cn (120.78.159.117:80)
Connecting to www.wolfcode.cn (120.78.159.117:443)
index.html           100% 

ClusterIP

只能在集群内部使用,不配置的话默认就是 ClusterIP

ExternalName

返回定义的CNAME别名,可以配置为域名

NodePort

随机启动一个端口(30000-32767),映射到ports的端口,并且在每个node上都绑定改端口

可以固定写死一个端口

复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  labels:
    app: nginx
spec:
  selector:
    app: nginx-deploy
  ports:
    - port: 80
      targetPort: 80
      name: web
      nodePort: 32000 # 固定写死
  type: NodePort

LoadBalancer

云服务上的负载均衡服务

相关推荐
m0_587383002 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·2 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停3 小时前
自动化测试(java)
java·开发语言·selenium·自动化
滕州市燕猫虎计算机科技工作室个体工商户3 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
志尊宝4 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金5 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
陈陈CHENCHEN5 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
后季暖5 小时前
电商问数笔记(2)
笔记
xier_ran5 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
paopaokaka_luck5 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts