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,看起来是正常的

相关推荐
Apipi*12 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP13 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
谢亮_vipxieliang14 小时前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
广州浮点FLOATLIC16 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding16 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK16 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20816 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)16 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62516 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
sbjdhjd17 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全