LAB-06:创建SVC
LAB 需求
重新配置一个已经存在的 deployment front-end,在名字为 nginx 的容器里面添加一个端口配置,名字为 http,暴露端口号为 80。
然后创建一个 service,名字为 front-end-svc,暴露该 deployment 的 http 端口,并且 service 的类型为 NodePort。
LAB 预配
# 预配置创建一个 deployment 名称为 front-end
user1@k8s-master:~/cka/6$ cat front-end.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: front-end
spec:
replicas: 1
selector:
matchLabels:
app: nginx-front-end
template:
metadata:
labels:
app: nginx-front-end
spec:
containers:
- name: nginx
image: nginx:1.18.0
imagePullPolicy: IfNotPresent
# 部署 front-end
user1@k8s-master:~/cka/6$ kubectl apply -f front-end.yaml
deployment.apps/front-end created
LAB 答案
# 切换 content
$ kubectl config use-context k8s
# edit front-end ,在 containers 中添加如下内容
$ kubectl edit deployment front-end
......
ports:
- name: http
protocol: TCP
containerPort: 80
# 创建 svc,暴露 80 端口
$ kubectl expose deployment front-end --port=80 --target-port=80 --protocol=TCP --type=NodePort --name=front-end-svc
LAB 验证
# 修改后的 yaml 文件如下
user1@k8s-master:~$ kubectl get deployments.apps front-end -o yaml
apiVersion: apps/v1
kind: Deployment
......
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx-front-end
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx-front-end
spec:
containers:
- image: nginx:1.18.0
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
name: http
protocol: TCP
# 查看 svc
user1@k8s-master:~$ kubectl get svc front-end-svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
front-end-svc NodePort 10.99.251.169 <none> 80:32417/TCP 3h55m
# 测试访问,使用 CLUSTER-IP
user1@k8s-master:~$ curl 10.99.251.169
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
# 测试访问,使用 node 的地址
user1@k8s-master:~$ curl 192.168.1.210:32417
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
参考资料
-
https://kubernetes.io/docs/concepts/services-networking/service/
-
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose