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

云服务上的负载均衡服务

相关推荐
huohaiyu1 分钟前
synchronized (Java)
java·开发语言·安全·synchronized
梵得儿SHI1 分钟前
Java 工具类详解:Arrays、Collections、Objects 一篇通关
java·工具类·collections·arrays·objects
熊小猿9 分钟前
Spring Boot 的 7 大核心优势
java·spring boot·后端
摸鱼的老谭11 分钟前
Java学习之旅第二季-13:方法重写
java·学习·方法重写
云灬沙11 分钟前
IDEA2025无法更新使用Terminal控制台
java·intellij-idea·idea·intellij idea
Yield & Allure12 分钟前
IDEA在plugins里搜不到mybatisx插件的解决方法
java·ide·intellij-idea
yunmi_16 分钟前
安全框架 SpringSecurity 入门(超详细,IDEA2024)
java·spring boot·spring·junit·maven·mybatis·spring security
孤独斗士16 分钟前
解决Intellij IDEA控制台,logger.info(),system.out.println()等中文乱码问题
java·ide·intellij-idea
shepherd11121 分钟前
JDK 8钉子户进阶指南:十年坚守,终迎Java 21升级盛宴!
java·后端·面试
不会调制解调的猫22 分钟前
笔记 | 内网服务器通过wifi穿透,设置流量走向
运维·服务器·笔记