k8s中的容器服务

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,超出会报错

  1. 不想使用默认端口,想使用自定义的,添加这个参数即可
  1. 想自定义某个范围的端口号

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加密
  1. 生成证书密钥

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

  1. 修改ingress

访问

auth认证
  1. 通过htpasswd生成认证文件
  1. 生成secret
  1. 创建ingress

成功访问和失败访问

配置上域名试试

OK,看起来是正常的

相关推荐
Johny_Zhao7 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
蝎子莱莱爱打怪1 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行4 天前
Linux和window共享文件夹
linux
木心月转码ing4 天前
WSL+Cpp开发环境配置
linux