创建服务资源
利用单个地址访问一组 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) |