Kubernetes服务有两种创建方式:
1、基于工作负载创建,即服务可以绑定工作负载,包括部署(Deployments)、有状态副本集(StatefulSet)和守护进程集(DaemonSet);
2、使用ExternalName将外部服务映射到内部服务。
下面就简单说说如何使用ExternalName:
首先,创建一个部署(Deployments),如:
apiVersion: apps/v1
kind: Deployment
metadata:
generation: 1
labels:
app: tb-redis
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: tb-redis
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: tb-redis
spec:
containers:
- image: docker.io/redis:6.0.9
imagePullPolicy: IfNotPresent
name: container-mdt6kry
ports:
- containerPort: 6379
name: tcp-6379
protocol: TCP
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 10m
memory: 10Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
其次,为部署tb-redis创建服务tb-redis-service:
kind: Service
apiVersion: v1
metadata:
name: tb-redis-service
labels:
app: tb-redis
spec:
ports:
- name: tcp-6379
protocol: TCP
port: 26379
targetPort: 6379
selector:
app: tb-redis
type: ClusterIP
sessionAffinity: None
最后,通过ExternalName引用tb-redis-service,即创建服务tb-redis-service-ext,选择服务类型ExternalName,设定值为tb-redis-service的内网域名:
kind: Service
apiVersion: v1
metadata:
name: tb-redis-service-ext
namespace: caas-test
labels:
app: tb-redis
spec:
type: ExternalName
sessionAffinity: None
externalName: tb-redis-service.default.svc.cluster.local
说明:
tb-redis-service.default.svc.cluster.local为服务tb-redis-service的内网域名,自定配置需要以集群环境而定,一般通过kubectl指令查询出即可。