cluster IP
service通过labels管理deployment,deplyment通过标签管理pod。但是如果想要能够通过service访问pod的服务,需要service和pod的标签相同。如果只是和deployment的标签相同,而deployment又通过不同的标签管理pod,那么通过service暴露的ip则访问不通。



我之前以为service匹配deployment就可以了,然后由deployment去将请求给到pod就行了,但是现在看来不仅如此,还需要service和pod labels相同才行。
默认的service相当轮询

无头服务:
对于无头 Services 并不会分配 Cluster IP,kube-proxy不会处理它们, 而且平台也不会为它们进行负载均衡和路由,集群访问通过dns解析直接指向到业务pod上的IP,所有的调度有dns单独完成


如果想访问无头模式下的service
方式1: 可以进入pod里面,然后执行nslookup 服务名(随便哪个pod都行)

然后直接curl 地址

方法2:通过pod的域名访问,待实践
NodePort
1. 首先还是创建pod
不过我发现了这个容易被忽视的name参数。容器的唯一标识。因为一pod可以有多个容器,pod的name就是用来区分的。
使用 kubectl logs <pod名称> -c myapp 可以查看该容器的日志,kubectl exec -it <pod名称> -c myapp -- /bin/bash 可以进入该容器的命令行界面。

2. 创建svc

在这里把spec.type类型改一下

3. 访问一下
集群内:
集群外:

正常是外部主机通过master节点的对外ip:<port>来访问pod业务
云上由于每个都能成为master,测试下来发现访问每个节点都会跳过去。
4. 注意
nodeport默认端口是30000-32767,超出会报错
- 不想使用默认端口,想使用自定义的,添加这个参数即可

- 想自定义某个范围的端口号
vim /etc/kubernetes/manifests/kube-apiserver.yaml
添加"--service-node-port-range=" 参数,端口范围可以自定义
修改后api-server会自动重启,等apiserver正常启动后才能操作集群
集群重启自动完成在修改完参数后全程不需要人为干预
loadbalancer

云平台会自动帮我们创建一个vip


访问:

这里如果服务不是默认80端口的话,也要指定端口哦
ingress
Ingress由两部分组成:Ingress controller和Ingress服务
Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。
业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。
1. 安装ingress,云平台安装组件后自动

在ingress-nginx-controller中看到的对外IP就是ingress最终对外开放的ip
2. 创建ingress对象,也就是定义转发规则

3. 访问
基于域名

这里访问不通的原因

因为规则配置了带域名了,如果想要通过IP访问
要么不配置域名,要么这样
基于路径访问

这个时候你会发现访问不通

因为没有配置annotations,默认情况下,Nginx Ingress 将访问路径直接转发到后端服务中的相同路径,如果不配置 URL 重写规则,由于访问路径和服务路径不同,访问将返回404
因为服务的路径一直是www.myapp.com. 这两个服务其实访问路径都是www.myapp.com. 只是通过path去选择某一个service。这点很重要!
nginx.ingress.kubernetes.io/rewrite-target: / #访问路径后加任何内容都被定向到/
配置后访问:


tls加密
- 生成证书密钥
openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -subj "/CN=nginxsvc/O=nginxsvc" -out tls.crt

2.创建secret
kubectl create secret tls web-tls-secret --key tls.key --cert tls.crt

- 修改ingress

访问

auth认证
- 通过htpasswd生成认证文件

- 生成secret

- 创建ingress

成功访问和失败访问

配置上域名试试

OK,看起来是正常的
