clusterip,nodeport,loadbalancer

本文详细解析了Kubernetes中服务(Service)的创建与配置,包括Deployment的定义、Pods的运行状态及IP分配策略。深入探讨了不同类型的Services如ClusterIP、NodePort和LoadBalancer的工作原理及网络访问路径,帮助读者理解Kubernetes内部网络架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

再下面这种情况下

apiVersion: apps/v1
 
kind: Deployment
 
metadata:
  name: app
 
spec:
 
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
 
    spec:
      containers:
        - name: app
          image: harryhare/testapp:test
          ports:
            - containerPort: 80
            
apiVersion: v1

kind: Service

metadata:
  name: app-service
  labels:
    name: app-service
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 81
    protocol: TCP
    targetPort: 80
  selector:
    app: web

$ kubectl get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
app-74fdb9975c-bk6mb   1/1     Running   0          7m32s   172.16.0.5   10.0.2.8   <none>           <none>
app-74fdb9975c-vrlzc   1/1     Running   0          7m32s   172.16.0.4   10.0.2.8   <none>           <none>

$ kubectl get svc -o wide
NAME          TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE     SELECTOR
app-service   LoadBalancer   172.16.254.121   106.54.143.7   81:32475/TCP   7m19s   app=web
kubernetes    ClusterIP      172.16.252.1     <none>         443/TCP        93m     <none>

在创建集群时,ip分配:

  • node 10.0.0.0/8
  • pod 和 service 共享 172.16.0.0/16
  • 我们从结果可以看到 pods 从地地址开始分配,services 从高地址分配

可访问地址:

nameipportdesc可访问
external ip106.54.143.781云服务 load balancer 的 外网ip网外/node/pod
cluster ip172.16.254.12181kubernate cluster ipnode/pod
cluster nameapp-service81service name, 解析到172.16.254.121pod
pod ip172.16.0.4/ 172.16.0.580pod 通过docker 暴露的ipnode/pod
node ip当前node 的 ip32475如果登录到那个node上则就是localhostnode/pod

在使用node ip 时,也并不是 当前在哪个ip 就访问哪个ip的pod,而是被分配过
即使当前node没有pods,访问端口32475也是有数据的

nameportdesc
port81service 的 port, cluster ip 或者 loadbalancer 使用的端口
node port32475也可以指定,如果不指定,则会随机在一个范围中分配
target port80docker 容器 暴露的端口
### 关于 Meteinfo 集群字段说明 Meteinfo 是一个用于气象数据处理和分析的平台,在集群环境中运行时涉及多个重要字段,这些字段对于理解集群状态、配置以及故障排除至关重要。 #### 1. 节点状态 (Node Status) 节点状态描述了每个计算节点的工作情况。通常包括以下几个方面: - **Ready**: 表明该节点可以正常接收新任务并执行工作负载。 - **Not Ready**: 提示存在某些问题使得节点暂时不可用,可能是因为硬件故障或其他异常状况[^1]。 ```json { "status": { "conditions": [ {"type": "Ready", "status": "True"} ] } } ``` #### 2. Pod 健康检查 (Pod Health Check) 为了确保应用程序实例能够稳定运行,Kubernetes 使用健康探针来监测 Pods 的可用性。这主要包括两种类型的探测器: - **Liveness Probe**: 判断容器是否正在运行;如果失败,则重启容器。 - **Readiness Probe**: 确认应用已经准备好接受流量;未就绪状态下不会收到新的请求。 ```yaml livenessProbe: httpGet: path: /healthz port: 8080 readinessProbe: tcpSocket: port: 9000 ``` #### 3. 日志记录与监控 (Logging and Monitoring) 有效的日志管理和实时性能指标收集对于快速定位问题非常重要。常见的做法是在集群内集成 ELK Stack 或 Prometheus 等工具来进行集中化管理。 - **ELK Stack**: Elasticsearch 存储索引化的日志条目,Logstash 收集来自不同源的日志文件,而 Kibana 提供可视化界面以便查询和展示数据。 - **Prometheus**: 主要关注时间序列数据库特性,擅长存储度量标准,并支持强大的告警功能。 #### 4. DNS 解析设置 (DNS Resolution Settings) 考虑到提到 Coredns 故障排查的相关信息,DNS 设置也是关键因素之一。特别是在分布式系统中,正确的名称解析机制能保障服务之间的通信顺畅无阻。 - 对于无法解析外部域名的情况,应确认 CoreDNS 是否已正确配置上游转发规则。 ```bash cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | .:53 { errors health ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } EOF ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值