目录
一、创建 Service:type 类型是 NodePort
1.1 创建一个 pod 资源
1.2 创建 service,代理 pod
在集群外访问 service:
数据转发流程:
二、创建 Service:type 类型是 ExternalName
2.1 创建 pod
2.2 创建 service
2.3 创建默认空间下的 service
2.4 访问名称解析
三、k8s 最佳实践:映射外部服务案例分享
3.1 k8s 集群引用外部的 mysql 数据库
在 node2 上安装 mysql 数据库:
创建 endpoint 资源
四、Service 服务发现:coredns 组件详解
DNS 是什么?
CoreDNS 是什么?
验证 coredns
[root@k8s-master01 ~]# vim pod_nodeport.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-nodeport
spec:
selector:
matchLabels:
run: my-nginx-nodeport
replicas: 2
template:
metadata:
labels:
run: my-nginx-nodeport
spec:
containers:
- name: my-nginx-nodeport-container
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
[root@k8s-master01 ~]# kubectl apply -f pod_nodeport.yaml
deployment.apps/my-nginx-nodeport created
# 删除上一篇文章创建的 pod
[root@k8s-master01 ~]# kubectl delete -f pod_test.yaml
deployment.apps "my-nginx" deleted
[root@k8s-master01 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-nodeport-7486c46445-4jldx 1/1 Running 0 56s 10.244.169.148 k8s-node2
my-nginx-nodeport-7486c46445-cbrjk 1/1 Running 0 56s 10.244.36.126 k8s-node1
[root@k8s-master01 ~]# vim service_nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx-nodeport
labels:
run: my-nginx-nodeport
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80 # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
nodePort: 30380 # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
selector:
run: my-nginx-nodeport
# 更新资源清单文件
[root@k8s-master01 ~]# kubectl apply -f service_nodeport.yaml
service/my-nginx-nodeport created
# 查看刚才创建的 service
[root@k8s-master01 ~]# kubectl get svc -l run=my-nginx-nodeport
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-nodeport NodePort 10.102.2.76 80:30380/TCP 81s
# 访问 service
[root@k8s-master01 ~]# curl 10.102.2.76
Welcome to nginx!