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

云服务上的负载均衡服务

相关推荐
健康平安的活着6 分钟前
langchain4j笔记篇(阳哥)
笔记
AAA修煤气灶刘哥6 分钟前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
练习时长一年12 分钟前
Spring事件监听机制(三)
java·后端·spring
月阳羊13 分钟前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试
2301_7813925222 分钟前
用spring框架实现简单的MVC业务
java·后端·spring
phltxy27 分钟前
SpringMVC 程序开发
java·后端·spring
至此流年莫相忘31 分钟前
设计模式:模板方法模式
java·开发语言·设计模式
人机10133 分钟前
Spring Security - FilterChainProxy
java
SimonKing1 小时前
Apache Commons Math3 使用指南:强大的Java数学库
java·后端·程序员
渣哥1 小时前
Java 集合迭代中的 fail-fast 与 fail-safe 机制详解
java