service
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: mynginx
name: mynginx-service
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: mynginx
type: NodePort
status:
loadBalancer: {}
获取服务 ip 通过 dns backend database.default svc cluster. l ocal
backend-database 对应于服务名称, default 表示服务在其中定义的名称 空 间,而 svc.cluster.local 是在 所有集群本地服 务名称 中使用的可配置 集群 域后缀。
获取服务 ip 通过 环境变量 KUBIA SERVICE HOST=l0.111.249.153 KUB工A SERVICE PORT=80
BACKENDDATABASESERVICEHOST和BACKENDDATABASE SERVICE PORT去获得IP地址和端口信息。
获取服务 ip 通过 ExternalName type: ExternalName externalName: someapi.somecompany.com ports:
- port: 80
几种方式可以在外部访问服务: • 将服务的类型设置成NodePort-每个集群节点都会在节点上打开一 个端口, 对于NodePort服务, 每个集群节点在节点本身(因此得名叫 NodePort)上打开一 个端口,并将在该端口上接收到的流量重定向到基础服务。 该服务仅在内部集群 IP 和端口上才可访间, 但也可通过所有节点上的专用端 口访问。 • 将服务的类型设置成LoadBalance, NodePort类型的一种扩展一—这使得 服务可以通过一个专用的负载均衡器来访问, 这是由Kubernetes中正在运行 的云基础设施提供的。 负载均衡器将流量重定向到跨所有节点的节点端口。 客户端通过负载均衡器的 IP 连接到服务。 • 创建一个Ingress资源, 这是一个完全不同的机制, 通过一个IP地址公开多 个服务——它运行在HTTP层(网络协议第7层)上, 因此可以提供比工作 在第4层的服务更多的功能。 我们将在5.4节介绍Ingress资源。
![dc717c4c4d4a403d5f4c4f77bf206415.png] (dc717c4c4d4a403d5f4c4f77bf206415.png)
使用JSONPath获取所有节点的IP
kubecl get nodes -o jsonpath='{.items[*l.etatus. addresses[?(@.type=="ExternalIP")] .address}'


创建证书 openssl genrsa -out tls . key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=kubia.example.com
kubectl create secret tls tls-secret --cert=tls.cert - -key=tls .key
![fe49e181a963412eb5373061f8b89f09.png] (fe49e181a963412eb5373061f8b89f09.png)
就绪探针的类型 • Exec 探针,执行进程的地方 。容器 的状态由进程的退出状态代码确定 。 •HTTP GET探针,向容器发送 HTTP GET 请求,通过响应的 HTTP 状态代码 判断容器是否准备好 。 • TCP socket 探针,它打开 一 个 TCP 连接到容器的指定端口。如果连接己建立, 则认为容器己准备就绪 。
存活探针通过杀死异常的容器并用新的正常 容器替代它 们来保持 pod 正常工作,而就 绪探针确保只有准备好处理请求的 pod 才可以接收它们(请求)。 这在容器启动时最为必要, 当然在容器运行一 段时间后也 是有用的。
就绪探针确 保客户端只与正常的pod交互, 并且永远不会知道系统存在问题。
![e521d159cb2d7535c8cabc62f04c880b.png] (e521d159cb2d7535c8cabc62f04c880b.png)
![35041e1b06691d06dbe0a477f4424c3e.png] (35041e1b06691d06dbe0a477f4424c3e.png)
如果无法通过服务访问pod, 应该根据下面的列表进行排查: • 首先, 确保从集群内连接到服务的集群IP, 而不是从外部。 • 不要通过ping服务IP 来判断服务是否可 访问(请记住, 服务的集群IP 是虚 拟IP, 是无法ping通的)。 • 如果已经定义了就绪探针, 请确保 它返回成功;否则该pod不会成为服务的 一部分 。 • 要确认某个容器是服务的 一部分, 请使用kubectl get endpoints来检 查相应的端点对象。 • 如果尝试通过FQDN或其中一部分来访问服务(例如, myservice. mynamespace.svc.cluster.local或 myservice.mynamespace), 但 并不起作用, 请查看是否可以使用其集群IP而不是FQDN来访问服务 。 • 检查是否连接到服务公开的端口,而不是目标端口。 • 尝试直接连接到podIP以确认pod正在接收正确端口上的 连接。 • 如果甚至无法通过pod的IP 访问应用, 请确保应用不是仅绑定 到本地主机。