service

Service的类型Service在K8s中有以下四种类型

ClusterIp:默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP

NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过: NodePort来访问该服务

LoadBalancer:在NodePort的基础上,借助cloud provider创建一个外部负载均衡器,并将请求转发到: NodePort

ExternalName:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有kubernetes 1.7或更高版本的kube-dns才支持

ClusterIP:

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: myapp
    release: stabel
  ports:
  - name: http
    port: 80
    targetPort: 80

 Headless Service:

有时不需要或不想要负载均衡,以及单独的Service IP。遇到这种情况,可以通过指定ClusterIP(spec.clusterIP)的值为“None”来创建Headless Service。这类Service并不会分配Cluster IP,kubeproxy不会处理它们,而且平台也不会为它们进行负载均衡和路由

注:访问方式为---

        服务名.名称空间.svc.cluster.local.@dns地址(cordns)

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    name: myapp
  clusterIP: "None"
  ports:
  - port: 80
    targetPort: 80

NodePort:

注:nodePort端口30000起步

apiVersion: v1
kind: Service
metadate:
  name: myapp
  namespace: default
spec:
  selector:
    name: myapp
  type: NodePort
  port:
  - name: http
    port: 443
    targetPort: 443
    nodePort: 30443

LoadBalancer:

注:该服务是在K8S前有一层软负载,通常由运营商提供是付费的!

lrloadBalancer和nodePort其实是同一种方式。区别在于loadBalancer比nodePort多了一步,就是可以调用cloud provider去创建LB来向节点导流

ExternalName:

ExternalName这种类型的Service通过返回CNAME和它的值,可以将服务映射到externalName字段的内容(例如:hub.atguigu.com )。ExternalName Service是Service的特例,它没有selector,也没有定义任何的端口和Endpoint。相反的,对于运行在集群外部的服务,它通过返回该外部服务的别名这种方式来提供服务

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: ExternalName
  externalName: www.baidu.com

当查询主机my-service.defalut.svc.cluster.local ( SVC_NAME.NAMESPACE.svc.cluster.local )时,集群的DNS服务将返回一个值my.database.example.com的CNAME记录。访问这个服务的工作方式和其他的相同,唯一不同的是重定向发生在DNS层,而且不会进行代理或转发

Ingress:

Ingress-Nginx github地址:https://github.com/kubernetes/ingress-nginx

Ingress-Nginx官方网站:https://kubernetes.github.io/ingress-ng

 Ingress-http代理访问:

apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  type: clusterIP
  selector:
    name: my-app
  ports:
    - port: 80
      targetPort: 80
      portocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metaddata:
  name: nginx
spec:
  rules:
  - host: www.hao.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp
          servicePort: 80

Ingress-https代理访问:

1.创建证书,以及cert存储方式
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

注:生产环境中的tls证书由供营商提供

2.创建Ingress
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type:clusterIP
  selector:
    name: myapp
  ports:
  - port: 443
    targetPort: 443
---
apiVersion: extensions/v1beta1
kind: Ingress
metadate:
  name: nginx
spec:
  tls:
    - hosts:
      - www.hao.com
      secretName: tls-secret
  rules:
    - host: www.hao.com
      http:
        paths:
        - path: /
          backend:
            serviceName: nginx
            servicePort: 443

 nginx认证(basicauth):

yum -y install httpd
htpasswd -c auth admin
kubectl create secret generic basic-nginx  --form-file=auth
注:安装apacache使用它的模块创建用户

----------------------------------------------------------------


apiVersion: extensions/v1beta1
kind:Ingress
metadata:
  name: nginx
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-nginx
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
  rules:
  - host: www.hao.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 443

 nginx地址重写:

名称介绍
nginx.ingress.kubernetes.io/rewrite-target必须重定向流量的目标URI串        
nginx.ingress.kubernetes.io/ssl-redirect
指示位置部分是否仅可访问SSL(当Ingress包含证书时默认为True
布尔
nginx.ingress.kubernetes.io/force-ssl-redirect即使Ingress未启用TLS,也强制重定向到HTTPS布尔
nginx.ingress.kubernetes.io/app-root定义Controller必须重定向的应用程序根,如果它在'/'上下文中
nginx.ingress.kubernetes.io/use-regex指示Ingress上定义的路径是否使用正则表达式布尔

 例:www.huai.com重定向到www.hao.com

注:因该访问,重定向到了其他地方,serviceName随便填也可以

apiVersion: extensions/v1beta1
kind:Ingress
metadata:
  name: nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: https://www.hao.com
spec:
  rules:
  - host: www.huai.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值