美文网首页DOCKER自留地
k8s-访问外网服务的两种方式

k8s-访问外网服务的两种方式

作者: 刘大坝 | 来源:发表于2020-11-15 23:48 被阅读0次

    需求

    k8s集群内的pod需要访问mysql,由于mysql的性质,不适合部署在k8s集群内,故k8s集群内的应用需要链接mysql时,需要配置链接外网的mysql,本次测试 k8s集群ip段为192.168.23.xx。以下提供两种方式,EndpointExternalName方式。

    一、创建Endpoint类型的服务

    创建命名空间

    新建命名空间my-first-app,需要访问外网的Pod,svc,endpoints等 都需要在该命名空间下。

    > kubectl create namespace my-first-app
    

    创建 endpoints

    创建my-mysql-endpoints.yaml

    > mkdir -p  ~/mysql-endpoint
    > cd ~/mysql-endpoint
    
    > cat <<EOF > my-mysql-endpoints.yaml
    apiVersion: v1
    kind: Endpoints
    apiVersion: v1
    metadata:
      name: my-mysql-endpoint #此名字需与 my-mysql-service.yaml文件中的 metadata.name 的值一致
      namespace: my-first-app #在固定的命名空间下
    subsets:
      - addresses:
          - ip: 192.168.23.1 ## 宿主机,由于我的虚拟机ping不通我本机的mysql(安装mysql时候禁用了未打开)
          - ip: 220.181.38.148 ## 随便取的一个 公网Ip
        ports:
          - port: 3306
    EOF
    
    
    

    创建service

    创建my-mysql-service.yaml

    > cat <<EOF > my-mysql-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-mysql-endpoint #此名字需与 my-mysql-endpoints.yaml文件中的 metadata.name 的值一致
      namespace: my-first-app  #在固定的命名空间下
    spec:
      ports:
        - port: 3306
        
    ###  验证,进入,ping一下配置的Ip地址。
    # kubectl exec -it my-first-springcloud-94cdd7487-xxxxx -n  my-first-app -- /bin/sh
    # ping 220.181.38.148
    
    EOF 
    

    部署pod 进行验证

    部署自己的服务到 my-first-app命名空间下,并且进入容器,进行ping测试

    > kubectl exec -it my-first-springcloud-94cdd7487-xxxxx -n  my-first-app -- /bin/sh
    > ping 220.181.38.148  ## 也可以在容器中直接调用对应的端口测试,此处只演示ping通,就代表能访问了
    PING 220.181.38.148 (220.181.38.148): 56 data bytes
    64 bytes from 220.181.38.148: seq=0 ttl=127 time=5.356 ms
    64 bytes from 220.181.38.148: seq=1 ttl=127 time=4.946 ms
    64 bytes from 220.181.38.148: seq=2 ttl=127 time=18.165 ms
    。。。。
    
    
    
    > 也可以查看service的 Endpoints 信息 
    > kubectl describe svc my-mysql-endpoint -n my-first-app
    
    Name:              my-mysql-endpoint
    Namespace:         my-first-app
    Labels:            <none>
    Annotations:       <none>
    Selector:          <none>
    Type:              ClusterIP
    IP:                10.102.160.141
    Port:              <unset>  3306/TCP
    TargetPort:        3306/TCP
    Endpoints:         192.168.23.1:3306,220.181.38.148:3306
    Session Affinity:  None
    Events:            <none>
    
    

    注意

    此种方式只适合Ip访问,对于像阿里云rds等数据库的。需要用域名。则需要用ExternalName方式不而不是Endpoints方式。

    二、创建ExternalName类型的服务

    创建``

    **> mkdir -p  ~/mysql-endpoint
    > cd ~/mysql-endpoin
    > cat <<EOF > my-mysql-external.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-mysql-external #此名字随便起
      namespace: my-first-app  #在固定的命名空间下
    spec:
      type: ExternalName 
      externalName: www.baidu.com ##提供方的服务完全限定域名,如rds域名等。
      ports:
        - port: 80
        
    ###  ExternalName类型的服务创建后,pod可以通过my-mysql-external.default.svc.cluster.local域名连接到外部服务,
    ####  或者通过my-mysql-external。当需要指向其他外部服务时,只需要修改spec.externalName的值即可。
    
    EOF
    
    
    原文参考:

    https://www.cnblogs.com/kuku0223/p/10898068.html
    https://blog.csdn.net/Andya_net/article/details/104714685 老规矩,联系我侵删。

    相关文章

      网友评论

        本文标题:k8s-访问外网服务的两种方式

        本文链接:https://www.haomeiwen.com/subject/aaaobktx.html