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访问更可靠;
目前我们这个只能在集群之内访问,不能从外部访问;//