kubernetes发布nginx
目录
- Nginx Pod启动
- Service访问Nginx
2.1. NodePort访问Nginx
2.2. ClusterIP访问Nginx
2.3. LoadBalancer访问Nginx
2.4. ExternalName访问Nginx - 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
输出结果如下:
在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:
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关系如下图:
让我们来创建一个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