六、service使用

1、ClusterIP

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  type: ClusterIP
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80

此方式只能再集群内部访问
sessionAffinity: ClientIP 表示客户端会话保持,每次调度到同一pod

2、NodePort

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  type: NodePort
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80
     nodePort: 32222

用于外部访问,外部本机地址端口为32222

3、无头服务

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  type: ClusterIP
  clusterIP: None
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80

此方式不能通过集群IP进行访问

4、LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  type: LoadBalancer
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80
[root@master inventory]# kubectl get svc
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
base-svc-nginx   LoadBalancer   10.98.35.142   <pending>     80:30234/TCP   11s
kubernetes       ClusterIP      10.96.0.1      <none>        443/TCP        10d

此方式适用于公有云上的 Kubernetes 服务
Kubernetes会调用 CloudProvider 在公有云上创建一个负载均衡服务,并且把被代理的 Pod 的 IP地址配置给负载均衡服务做后端。
此方式在本地环境不能使用

5、ExternalName

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  type: ExternalName
  externalName: www.baidu.com
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80

此方式适用于集群内部容器访问外部资源

6、直接分配公网

apiVersion: v1
kind: Service
metadata:
  name: base-svc-nginx
  namespace: default
spec:
  selector:
    app: web-http
    release: stable
  externalIPs:
  - 168.84.68.1
  sessionAffinity: ClientIP
  ports:
   - name: nginx
     port: 80
     targetPort: 80
[root@master inventory]# kubectl get svc
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
base-svc-nginx   ClusterIP   10.97.84.192   168.84.68.1   80/TCP    3s
kubernetes       ClusterIP   10.96.0.1      <none>        443/TCP   10d

此方式直接将服务发布在公网之上

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容