Pod & Service

Pod与Service的关系:

  1. 通过lable-selector关联
  2. service实现pod的负载均衡(TCP/UDP )

Service 3种常用类型

  1. ClusterIP : 集群内部使用
  2. NodePort : 对外暴露应用
  3. LoadBalancer : 适用公有云,对外暴露应用
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: web

Ingress Controller :

项目地址:https://github.com/kubernetes/ingress-nginx

wget  https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml

修改如下部分
在这里插入图片描述
Ingress Contronler怎么工作的?
Ingress Contronler通过与Kubernetes API 交互,动态的去感知集群中Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段Nginx 配置,应用到管理的Nginx服务,然后热加载生效。
以此来达到Nginx负载均衡器配置及动态更新的问题。

流程包流程:客户端->Ingress Controller(nginx)-> 分布在各节点Pod

案例:

  1. 先部署deployment,创建pod
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.17
        name: nginx
  1. 对pod创建service
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web
  type: NodePort
  1. 创建ingress绑定service
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alinagedu
spec:
  rules:
  - host: web.aliangedu.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 80
  1. 检查
[root@master yaml]# kubectl get pod  -o wide
NAME                   READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
web-6bc4dfc596-94xdj   1/1     Running   0          43h   10.244.104.52    node2   <none>           <none>
web-6bc4dfc596-mgdjw   1/1     Running   0          43h   10.244.166.153   node1   <none>           <none>

[root@master yaml]# kubectl get svc,ep
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   3d23h
service/web          ClusterIP   10.104.105.213   <none>        80/TCP    43h

NAME                   ENDPOINTS                            AGE
endpoints/kubernetes   172.16.10.60:6443                    3d23h
endpoints/web          10.244.104.52:80,10.244.166.153:80   43h

[root@master yaml]# kubectl get ingress
NAME        CLASS    HOSTS              ADDRESS   PORTS   AGE
alinagedu   <none>   web.aliangedu.cn             80      42h
  1. 测试
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.10.110 csdharbor.com
172.16.10.62 web.aliangedu.cn

[root@localhost ~]# curl web.aliangedu.cn
myapp-v2
[root@localhost ~]# curl web.aliangedu.cn
myapp-v2
[root@localhost ~]# curl web.aliangedu.cn
myapp-v1
[root@localhost ~]# curl web.aliangedu.cn
myapp-v2
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐