创建服务资源
利用单个地址访问一组 Pod
1  | [root@k8s-master1 demo]# kubectl get pods -L app  | 
kubuctl exec 在运行的容器中远程执行命令
1  | [root@k8s-master1 demo]# kubectl exec kubia-cq4ht -- curl -s 10.0.0.22  | 
会话亲和性
1  | # sessionAffinity: ClientIP (默认为None)  | 
指定多个端口 80 443
1  | # 在1个容器服务中有多个服务端口  | 
服务发现
通过环境变量发现服务
1  | 1. 客户端如何知道svc的IP和端口?  | 
1  | 1. 在pod开始运行前,k8s会完成一系列的环境变量配置  | 
通过 DNS 发现
1  | [root@k8s-master1 demo]# kubectl exec kubia-55cbs bash  | 
暴露服务
endpoint
1  | 1. 服务并不是和pod直接相连  | 
将服务暴露到外部
1  | # Service 类型  | 
创建 NodePort
1  | [root@k8s-master1 demo]# vim kubia-ndp.yaml  | 
查看 ipvsadm 规则
1  | [root@k8s-master1 demo]# kubectl get ep kubia-nodeport  | 
域名应该找哪个node
1  | 还得有一层负载均衡  | 
 
Load Badancer 通过负载均衡将服务暴露出来
1  | 1. nodeport 虽然可以解决外部暴露,但是当客户端连接的时候写了其中一个nodeip+端口,但是该node又出现问题会导致服务不可访问  | 
1  | 1. NodePort  | 
通过 Ingress 暴露服务
创建 Ingress
1  | [root@k8s-master1 cfg]# kubectl explain ingress  | 
1  | # 测试增加域名解析  | 
通过不同路径 映射不同服务
1  | # 在同一个主机(host),不同的路径上,ingress暴露出多个服务  | 
不同的服务映射到不同的主机上(host)
1  | # dns本地解析  | 
配置 Ingress 处理 TLS 传输
1  | # 处理 HTTPS 流量数据  | 
Pod 就绪指针 就绪后发出信号
1  | # pod 现在作为 svc 服务的后端  | 
添加就绪指针
1  | [root@k8s-master1 demo]# vim kubia-rs.yaml  | 
就绪探针的实际作用
1  | 1. 应该通过删除pod 或者 更改pod标签来移除pod,而不是更改探针  | 
使用 headless 服务来发现独立的 Pod
返回所有的 Pod IP
1  | 1. 常规 Service:执行服务的DNS时,返回服务的集群 IP(svc IP)  | 
创建 headless 服务
1  | [root@k8s-master1 demo]# vim kubia-svc-headless.yaml  | 
1  | [root@k8s-master1 demo]# kubectl get svc  | 
通过DNS来发现 Pod
1  | # 临时任务 不重启 执行后销毁  | 
1  | [root@k8s-master1 demo]# kubectl apply -f busybox.yaml  | 
排查服务故障
1  | 1. 先确保从集群内连接到服务集群IP(svc ip)  | 
