1 安装minikube
2 通过minikube 启动k8s集群
minikube start
通过
3 创建一个deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
kubectl apply -f nginx-dep.yml
为了确保集群内部的nginx服务已经启动了,我们可以进入对应的pod 去查看
kubectl exec nginx-deployment-7fb7fd49b4-29cdk -it -- /bin/sh
// 或者 kubectl exec deployment/nginx-deployment -it -- /bin/sh
curl localhost
输出如下,则代表pod内的Nginx服务已经启动了
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
4 创建 service,将Pod暴露出来
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
kubectl apply -f nginx-svc.yml
5 如果你使用的是minikube, 你通过minikube service nginx-service --url来获取访问入口,NodePort一般是配合externalIPs一起使用。
如果你想本地使用(通过localhost来访问),你可以使用端口转发。下面的命令就建立了一个端口转发
kubectl port-forward nginx-deployment-7d9d7464fb-mrc4h 30001:80
30001 为本机端口,80为集群内部访问端口(port)
K8S 各个port关系
- port: 是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
- nodePort: 是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service
- targetPort: 是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
- containerPort: 是pod内部容器的端口,targetPort映射到containerPort
Ingress
- 查看Ingress是否开启
minikube addons list
- 在minikube开启Ingress Controller只需要执行下面的命令
minikube addons enable ingress
- 创建example-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
- 通过运行下面的命令创建 Ingress 资源
kubectl apply -f example-ingress.yaml
- 验证 IP 地址已被设置
kubectl get ingress
- 在 /etc/hosts 文件的末尾添加以下内容
说明: 如果你在本地运行 Minikube 环境,需要使用 minikube ip 获得外部 IP 地址。 Ingress 列表中显示的 IP 地址会是内部 IP 地址。
// 配置host
172.17.0.15 hello-world.info
- 验证 Ingress 控制器能够转发请求流量:
curl hello-world.info
可视化界面
除了使用命令行来查看pod,service的信息,我们也可以使用可视化界面
- 查看Minikube内置插件,默认情况下Dashboard插件未启用
minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|---|---|---|
| dashboard | minikube | disabled |
| default-storageclass | minikube | enabled ✅ |
- 启用Dashboard插件
minikube addons enable dashboard
- 开启Dashboard,通过--url参数不会打开管理页面,并可以在控制台获得访问路径
minikube dashboard --url
- 要想从外部访问Dashboard,需要从使用kubectl设置代理才行,--address设置为你的服务器地址;
kubectl proxy --port=44469 --address='192.168.5.94' --accept-hosts='^.*' &
- 从外部访问服务器需要开启防火墙端口;
# 切换到root用户
su -
# 开启端口
firewall-cmd --zone=public --add-port=44469/tcp --permanent
# 重启防火墙
firewall-cmd --reload
- 通过如下地址即可访问Dashboard:
http://192.168.5.94:44469/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/