kubernetes发布nginx

目录

  1. Nginx Pod启动
  2. Service访问Nginx
    2.1. NodePort访问Nginx
    2.2. ClusterIP访问Nginx
    2.3. LoadBalancer访问Nginx
    2.4. ExternalName访问Nginx
  3. Deployment方式部署Nginx
    3.1 Nginx Replicas

Nginx Pod 启动

nginx-v1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

创建Pod

kubectl apply -f nginx-v1.yaml
pod/nginx created

查询Pod

kubectl get pods

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          2m34s

这个Nginx Pod启动完成后如何访问nginx服务?
有一种访问方式可以使用,进入容器访问localhost:

kubectl exec -it po/nginx -- bash
apt update
apt install -y curl
curl http://localhost

输出结果如下:
In-pod
在Kubernetes访问集群内访问可以使用Service。

Service访问Nginx

  • Service是在一组Pod上对网络服务的抽象;
  • Service就像是网线插入到Pod的网卡上,为Pod提供网络通信服务;
  • Service指向有多个Pod,因此Service也提供负载均衡服务,Service会将流量分发到不同Pod;
  • 由于发布、故障等问题,Pod可能会随时创建或者销毁,因此Service为这些随时变更的Pod提供了统一的网络入口。

NodePort方式访问Nginx

NodePort设置一个或多个可以外部访问的端口,访问方式:节点IP+端口号方式,所有节点都可以。
比如: 我们有一个节点的IP地址为:192.168.1.10,NodePort端口为:80,那么我们就可以在我们自己的主机上通过http://192.168.1.10:80访问服务。

新建一个Nginx NodePort的yaml清单文件: nginx-service-nodeport.yaml,并创建这个NodePort,

kubectl apply -f nginx-service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  ports:
    - name: nginx-service-nodeport
      nodePort: 80
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: NodePort

通过主机IP+80端口访问Nginx:
NodePort

ClusterIP访问Nginx

ClusterIP方式为提供集群内访问的IP,即集群内部IP访问方式。ClusterIP只能集群内访问,不能通过外部进行访问。

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  ports:
    - name: nginx-service-clusterip
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP

集群内访问ClusterIP测试,新建nginx test Pod清单文件并创建busybox Pod,

kubectl apply -f nginx-test-pod.yaml

# nginx test Pod启动成功后进入Nginx Pod
kubectl exec -it nginx-test -- bash
apt update
apt install -y curl
curl http://nginx

nginx-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx-test
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

此时使用主机IP无法正常访问Nginx,但是可以在集群内Pod进行访问
在这里插入图片描述

LoadBalancer和ExternalName

目前暂时没有资源可以对这两种方式进行测试,所以暂时不编写这两类的测试。

Deployment方式部署Nginx

单个Pod不好管理副本,Deployement来管理Pod的副本集合。Deployment、副本和Pod关系如下图:
relationship-about-Deployment-Replicas-Pod

让我们来创建一个Nginx的Deployment 包含4个replicas的清单文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
Logo

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

更多推荐