当前位置:   article > 正文

k8s笔记 | Service 服务

k8s笔记 | Service 服务

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

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deploy
  5. labels:
  6. type: nginx-deploy
  7. test: 1.0.0
  8. namespace: default
  9. spec:
  10. replicas: 2 # 副本数
  11. revisionHistoryLimit: 10 # 保留的历史版本数
  12. selector: # 选择器
  13. matchLabels:
  14. app: nginx-deploy
  15. test: 1.0.0
  16. strategy: # 更新策略
  17. type: RollingUpdate # 更新策略类型 RollingUpdate、Recreate
  18. rollingUpdate:
  19. maxUnavailable: 25% # 更新时最大不可用副本数
  20. maxSurge: 25% # 更新时最大超出副本数
  21. template: # 模板
  22. metadata:
  23. labels:
  24. app: nginx-deploy
  25. test: 1.0.0
  26. spec:
  27. containers:
  28. - name: nginx
  29. image: nginx:latest
  30. imagePullPolicy: IfNotPresent
  31. resources:
  32. requests:
  33. cpu: 50m
  34. memory: 128Mi
  35. limits:
  36. cpu: 50m
  37. memory: 128Mi
  38. restartPolicy: Always # 重启策略
  39. terminationGracePeriodSeconds: 30 # pod被删除时的等待时间
  1. # 创建
  2. kubectl create -f nginx-deploy.yaml

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

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-svc
  5. labels:
  6. app: nginx
  7. spec:
  8. selector:
  9. app: nginx-deploy
  10. ports:
  11. - port: 80
  12. targetPort: 80
  13. name: web
  14. type: NodePort
  1. # 创建
  2. kubectl create -f nginx-svc.yaml
  3. # 查看pod信息
  4. get po -l app=nginx-deploy -o wide
  5. # 结果
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. nginx-deploy-5666fcbb6b-6k8mw 1/1 Running 0 5m6s 10.244.107.241 k8s-node3 <none> <none>
  8. nginx-deploy-5666fcbb6b-h2w4l 1/1 Running 0 5m6s 10.244.122.95 k8s-node4 <none> <none>
  9. # 查看endpoint
  10. kubectl get ep
  11. #结果
  12. kubernetes 192.168.10.100:6443 5d19h
  13. nginx-svc 10.244.107.241:80,10.244.122.95:80 6m48s

通过服务名进行访问

  1. # 创建其他的pod通过 service name进行访问(推荐)
  2. kubectl exec -it dns-test -- sh
  3. wget http://nginx-svc
  4. # 通过服务名+命名空间
  5. wget http://nginx-svc.default

代理k8s外部服务

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

2. 自己创建endpoint

nginx-svc-external.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-svc-external
  5. labels:
  6. app: nginx
  7. spec:
  8. ports:
  9. - port: 80
  10. targetPort: 80
  11. name: web
  12. type: ClusterIP
  1. # 部署
  2. kubectl create -f nginx-svc-external.yaml
  3. # 查看服务
  4. [root@k8s-master services]# kubectl get svc
  5. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d19h
  7. nginx-svc NodePort 10.104.51.98 <none> 80:30539/TCP 20m
  8. nginx-svc-external ClusterIP 10.103.145.219 <none> 80/TCP 7s
  9. # endpoint
  10. [root@k8s-master services]# kubectl get ep
  11. NAME ENDPOINTS AGE
  12. kubernetes 192.168.10.100:6443 5d19h
  13. nginx-svc 10.244.107.241:80,10.244.122.95:80 20m
  1. # 创建endpoint nginx-ep-external.yaml
  2. apiVersion: v1
  3. kind: Endpoints
  4. metadata:
  5. labels:
  6. app: nginx # 与service一致
  7. name: nginx-svc-external # 与service一致
  8. namespace: default # 与service一致
  9. subsets:
  10. - addresses:
  11. - ip: 120.78.159.117 #目标服务ip
  12. ports:
  13. - name: web
  14. port: 80
  15. protocol: TCP
  1. # 创建+查看
  2. [root@k8s-master services]# touch nginx-ep-external.yaml
  3. [root@k8s-master services]# kubectl create -f nginx-ep-external.yaml
  4. endpoints/nginx-svc-external created
  5. [root@k8s-master services]# kubectl get ep
  6. NAME ENDPOINTS AGE
  7. kubernetes 192.168.10.100:6443 5d19h
  8. nginx-svc 10.244.107.241:80,10.244.122.95:80 27m
  9. nginx-svc-external 120.78.159.117:80 5s
  10. # 测试访问
  11. kubectl exec -it dns-test -- sh
  12. wget http://nginx-svc-external
  13. # 测试成功
  14. / # wget http://nginx-svc-external
  15. Connecting to nginx-svc-external (10.103.145.219:80)
  16. Connecting to www.wolfcode.cn (120.78.159.117:80)
  17. Connecting to www.wolfcode.cn (120.78.159.117:443)
  18. index.html 100% |***

方向代理外部域名

创建一个service的配置文件

nginx-svc-domain.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-svc-domain
  5. labels:
  6. app: nginx-svc-domain
  7. spec:
  8. type: ExternalName
  9. externalName: www.wolfcode.cn

测试效果

  1. # 进入终端
  2. kubectl exec -it dns-test -- sh
  3. # 删除之前的index.html
  4. rm -rf index.html
  5. # 测试
  6. wget nginx-svc-domain
  7. # 结果
  8. wget wolfcode-svc-domain
  9. wget: bad address 'wolfcode-svc-domain'
  10. / # wget nginx-svc-domain
  11. Connecting to nginx-svc-domain (120.78.159.117:80)
  12. Connecting to www.wolfcode.cn (120.78.159.117:80)
  13. Connecting to www.wolfcode.cn (120.78.159.117:443)
  14. index.html 100%

ClusterIP

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

ExternalName

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

NodePort

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

可以固定写死一个端口

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-svc
  5. labels:
  6. app: nginx
  7. spec:
  8. selector:
  9. app: nginx-deploy
  10. ports:
  11. - port: 80
  12. targetPort: 80
  13. name: web
  14. nodePort: 32000 # 固定写死
  15. type: NodePort

LoadBalancer

云服务上的负载均衡服务

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/511491
推荐阅读
相关标签
  

闽ICP备14008679号