【kubernetes笔记】k8s_service(07)

Page content

这一篇整理了service相关的内容。

1.Service的作用

  1. 防止Pod失联,当Pod启动后往Service里注册服务。
  2. 定义一组Pod访问策略(负载均衡)。

2.Service和Pod的关系

根据label和selector标签建立联系

3.常用的Service类型

  • ClusterIp:集群内部使用
  • NodePort:对外访问应用使用
  • LoadBalancer: 对外访问应用使用,公有云

内部网部署应用,外网一般不能访问到的

4.简单例子

Service代理携带app=hostnames标签的Pod。
这个Service的80端口,代理的是Pod的9376端口。

apiVersion: v1
kind: Service
metadata:
  name: hostnames
spec:
  selector:
    app: hostnames
  ports:
  - name: default
    protocol: TCP
    port: 80
    targetPort: 9376

应用

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hostnames
spec:
  selector:
    matchLabels:
      app: hostnames
  replicas: 3
  template:
    metadata:
      labels:
        app: hostnames
    spec:
      containers:
      - name: hostnames
        image: k8s.gcr.io/serve_hostname
        ports:
        - containerPort: 9376
          protocol: TCP

查看部署情况

$ kubectl get endpoints hostnames
NAME        ENDPOINTS
hostnames   10.244.0.5:9376,10.244.0.6:9376,10.244.0.7:9376

5.NodePort

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
  - nodePort: 8080
    targetPort: 80
    protocol: TCP
    name: http
  - nodePort: 443
    protocol: TCP
    name: https
  selector:
    run: my-nginx

<宿主机的IP地址>:8080 能访问 => 某一个被代理的 Pod 的 80 端口

6.LoadBalancer

kind: Service
apiVersion: v1
metadata:
  name: example-service
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

7.ExternalName

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: my.database.example.com

8.分配公有IP


kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 9376
  externalIPs:
  - 80.11.12.10

欢迎大家的意见和交流

email: li_mingxie@163.com