38 k8s-18.service 创建服务
1.1 创建一个Service
01.//创建nginx-svc.yml文件 [root@k8s-master01 ~]# vim nginx-svc.yml //yml文件内容: apiVersion: v1 kind: Service metadata: labels: app: nginx-svc name: nginx-svc spec: ports: - name: http # Service端口的名称 port: 80 # Service自己的端口, servicea调用serviceb,http://serviceb,http://serviceb:8080 protocol: TCP #协议,支持UDP,TCP,STCP;default:TCP targetPort: 80 # 后端应用的端口 - name: https port: 443 protocol: TCP targetPort: 443 selector: app: nginx sessionAffinity: None type: ClusterIP [root@k8s-master01 ~]# kubectl create -f nginx-svc.yml service/nginx-svc created [root@k8s-master01 ~]# kubectl get svc 02.//查看创建的新service,nginx-svc [root@k8s-master01 ~]#kubectl get svc
03.//查看端口号并执行curl访问 [root@k8s-master01 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-66bbc9fdc5-j2zqc 1/1 Running 0 63m 10.244.122.152 k8s-master02 …...省略…… [root@k8s-master01 ~]# curl 10.244.122.152
04.//列出当前命名空间下的所有 services,注意nginx-svc的ClusterIP
05.//执行curl访问ClusterIP可以成功 [root@k8s-master01 ~]# curl 10.104.33.36 (#ClusterIP)
06.//获取pod并查看相关的svc 日志 [root@k8s-master01 ~]# kubectl get pod [root@k8s-master01 ~]# kubectl logs nginx-66bbc9fdc5-j2zqc 10.244.32.128 - - [21/Sep/2020:14:52:47 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.1" "-" 虽然ClusterIP也可以成功访问,但是我们不建议使用ClusterIP访问,我们建议使用pod的NAME:nginx-svc访问 07.//执行结果 [root@k8s-master01 ~]# kubectl get svc [root@k8s-master01 ~]# kubectl get pod [root@k8s-master01 ~]# kubectl exec -it busybox -- sh / # wget http://nginx-svc / # cat index.html 08.//不在同一个需要加default,之前的index.html存在了先删除,再使用wget获取并查看 [root@k8s-master01 ~]# kubectl exec -it busybox -- sh / # rm -f index.html ##之前的index.html存在了先删除## / # wget http://nginx-svc.default ##使用wget获取 Connecting to nginx-svc.default (10.104.33.36:80) ##跨网段的需要加default index.html 100% |**********************************************************************************************| 612 0:00:00 ETA / # cat index.html <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> 09.//不建议使用这种模式,这种有点像使用了网状的节点,一个扣着一环,一个点出问题很容易影响其他环节; //所以通过IP访问不安全,删除版本或者更新迭代新版本发布,IP是会变的; 10.//两个pod都删除做下测试,两个删除就会重建,重建podIP就可能会变化; [root@k8s-master01 ~]# kubectl get pod -o wide [root@k8s-master01 ~]# kubectl delete pod nginx-66bbc9fdc5-j2zqc [root@k8s-master01 ~]# kubectl delete pod nginx-66bbc9fdc5-jj86d
11.// 重建后对比下,IP果然变了 [root@k8s-master01 ~]# kubectl get pod –owide
12.//使用名称访问成功 [root@k8s-master01 ~]# kubectl exec -it busybox – sh / # rm –f index.html / # wget http://nginx-svc Connecting to nginx-svc (10.104.33.36:80) index.html 100% |**********************************************************************************************| 612 0:00:00 ETA / # exit [root@k8s-master01 ~]# kubectl get svc [root@k8s-master01 ~]# kubectl get ep 10.104.33.36这个是ClusterIP; 13.//假设删其中一个pod #kubectl delete pod nginx-66bbc9fdc5-85cfg; 14.//删除之后看不到删除的pod对应的IP了;yaml输出nginx-svc可靠ip有什么变化 [root@k8s-master01 ~] # kubectl get ep nginx-svc –oyaml 15.// 删除之后会重新添加新的pod,新的pod已经自动添加进来了 //这样后端service我们无需关心ip地址,service name访问更可靠; 目前我们这个只能在集群之内访问,不能从外部访问; 16.//新启用的IP:10.244.195.32也可以对的上; //这样后端service我们无需关心ip地址,service name访问更可靠; 目前我们这个只能在集群之内访问,不能从外部访问;//