作者 | 高宇航职位 | F5解决方案参谋
在容器技术倒退初期,企业只在开发、测试环境中应用容器。随着容器技术的倒退以及企业对于容器技术的实践和实际的把握逐步加深,企业开始在生产环境中应用容器,应用规模也越来越大。K8S无疑成为了企业治理容器的首选,作为承载古代利用最重要的基础架构。当利用微服务化后,迁徙至K8S,开始思考服务如何对外裸露,当然原生的裸露形式有很多,随着各种类型的服务逐步迁徙至K8S,使用者开始思考入口服务能力的问题,例如,性能问题、稳定性问题、非HTTP业务公布问题、七层业务公布能力的问题、安全性问题、高效治理问题等等,随后开始调研企业级入口计划。这篇文章给大家带来的是利用MSDA实现K8S平台的服务发现。为什么要给大家介绍这种形式呢?第一是想给大家多一种抉择,第二是因为MSDA具备他本身的个性,比方轻量化、无摩擦及与平台无关化,看完之后你可能对这些个性会有一个初步的了解。MSDA是利用iApp LX构建了一个模版,应用该模版能够创立一个服务的实例,整个创立过程如下:在F5上创立一个服务的资源池Pool,初始为空;向K8S的Endpoint查问指定Namespace中指定的Service对应的Pod的IP地址和端口(Endpoint是实现理论服务的端点的汇合,当service创立后会创立一个和service同名的Endpoint的汇合,当然你须要配置selector,所以下面我就那么说了,然而这并不是最谨严的说法,为了便于了解);将查问到的IP地址和端口增加至创立好的Pool中;每隔肯定的周期(可自行定义)查问Endpoint中的变动,将变动自动更新到Pool中;实例销毁,Pool和Member将主动删除;利用AS3创立Virtual Server实现服务公布。MSDA实现K8S服务发现的形式有 webui 和API 两种形式: MSDA通过webui实现服务发现的具体操作步骤如下:01上传f5-iapplx-msda-k8s rpm包至BIGIP->iApps->Package Management LX->import02上传完RPM包后会生成一个Templetes,iApps->Templates->Templates LX将通用的参数证书、Endpoint地址等替换成本人环境中的参数并保留。03创立一个实例在iApps->Application Services->Applications LX抉择模版点击Next将namespace信息、service name、pool名称等信息填写好,点击Deploy实现创立后,将发现的服务主动增加至Pool中04删除此实例,须要先将该实例Undeploy,而后再删除实例尽管大家看到webui的整个实例创立过程非常简单,然而绝大多数使用者更偏向于自动化和DevOps的形式来批量创立、销毁实例,所以明天咱们重点来阐明通过API的形式部署MSDA实现K8S上的服务发现。MSDA通过API实现服务发现的具体操作步骤如下:01上传f5-iapplx-msda-k8s rpm包至BIGIP->IApps->Package Management LX->import如果你违心你也能够用API导入。02创立一个服务的实例1应用Postman创立一个实例Post的内容如下,标正文的内容须要批改为你本人定义或者环境的内容
{“name”: “msdak8s1”,“inputProperties”: [{“id”: “k8sEndpoint”,“type”: “STRING”,“value”: “https://192.168.26.31:6443”, #你本人K8s环境的endpoint地址"metaData": {"description": "k8s endpoint","displayName": "k8s endpoint","isRequired": true}},{"id": "authenticationCert", #上面的clientCert、key、CA须要批改为你本人环境的"type": "JSON","value": {"clientCert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJS2F0bDlLalpCaVF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRBMU1EZ3dOak0xTlRKYUZ3MHlNekExTVRJd05ERTNOVFJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ4QlVGdmQ4eDZJRnZZZlEKYW5qTHR3Sjl5eUlPVi9zOUFMakJsSlplaGZidmhnWUtrTUJqMUgwY05NSy8xQWIrSElQQVVWOThjWXNpeGdBWQoxMHVUTitkK2N1WHUrVDljbDBpdkJ1MkEvYW1CT29UTDg3eWNlYjdZZlBEYUxuME9RVHV4NmJ6WEhIZ1RHMW9ICnBlNGI5UWhrNGZlell3clVQQWRtMUNOcnYrbUppZzFjQ29mdkRDQ3BJa0Q3UWF5NmxLNmVHbDVYZjNmQ3R0VGYKY3d5MWNBby9oak53WGJWRXF1c01xTlp4N2FIcVFGbk5ONG83K3RsUmNBVHFHMFdyTysrazZndEtKajRKVi9hTwpHRVRvTFFHbE9OR3c1Vkx4UEpTL2RSRDEvMUh5Qm9JblI4V1ZSc3NLK2pCaFdISkh4UjdROVU2Z2NUY204UGVGCjJkaVF6UUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JReGFCQjFPZEIzT25Gd1dXOE1KNVg4dDZMRwp6ekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBZlFGbHVZN1NLVDNrM0dZQXJwTk4vdzAxd0lvOWprVFcydFh6ClpyRVFLMnRjNHZnK1UrdWFNYjlKQ2RnazF0bFQ4WmgwZDV3VTFkWmlnZm13Qk9YMEZFNnZjc0VTWTV3eTAvbHoKQXVTOGlSd2p6OTJxM0lUZEU2MjVqNVpDVEw5UkVpU3pSSG5mNExJS015K2RFNGpnaWxUVDk0WUd4bXNiL2NLMAozc2hnb0s2ajJiMFQ3R3crV2hEODlzdUJiN2lJT2x3cE9qbWM5elhBRmo2MWl5N1ZGRHNpTDUwbmFLQ0VobjMxCmt5SXltaVRvRXZmL3FFZ0RXK3dML0JKUktCVSs5N1JjVGU1SmZvSTI3V3I3WXp3U2FxTjh2cTF2UUFGMXJya2EKVnpJNjJTenJ0R1lycml6cmRZSVZHSE1ITXJKdG1OQXJ0MVdXZlJpTWFYN1RSYlRIUlE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","clientKey": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBdDhCVUZ2ZDh4NklGdllmUWFuakx0d0o5eXlJT1YvczlBTGpCbEpaZWhmYnZoZ1lLCmtNQmoxSDBjTk1LLzFBYitISVBBVVY5OGNZc2l4Z0FZMTB1VE4rZCtjdVh1K1Q5Y2wwaXZCdTJBL2FtQk9vVEwKODd5Y2ViN1lmUERhTG4wT1FUdXg2YnpYSEhnVEcxb0hwZTRiOVFoazRmZXpZd3JVUEFkbTFDTnJ2K21KaWcxYwpDb2Z2RENDcElrRDdRYXk2bEs2ZUdsNVhmM2ZDdHRUZmN3eTFjQW8vaGpOd1hiVkVxdXNNcU5aeDdhSHFRRm5OCk40bzcrdGxSY0FUcUcwV3JPKytrNmd0S0pqNEpWL2FPR0VUb0xRR2xPTkd3NVZMeFBKUy9kUkQxLzFIeUJvSW4KUjhXVlJzc0srakJoV0hKSHhSN1E5VTZnY1RjbThQZUYyZGlRelFJREFRQUJBb0lCQVFDcmlRUDNITHFEc3FFaApPYlE2Y09IYnlwdWNFZ0xKNTJRZlZGcUNWNDJPQ2VPNGZkTkhKaE1Mdm0raVlWdXFsNHlKR2dWaThYeStrbUMzCjdrZENWTzd0OVZGNStXU0prYmppRVp3ekgyeVhZTEdlNjNGcDY5MDNXZzNITlNDNDNVMTlZRGpLTnR1cFcvNmEKUGdWOXhUYWNIR1h3L01lZDRmSVd4K0lhajZaNjAvZThyOTQ3T3RHUVI5L2V0UXZSbWFIOHlpZnFxa2c3MTFXOQphU0FLWjhOM0hrS3JWcWlPUWY5WGlLM0IxWkhkY1NiQTdNYkZIRDdxa2xtTk9TaCs5S0k2cmlVUFYrSUF6WG1ZCmhJZ0Z0S0dyUXJRRktVTXBZL2h0ZWdndkZzaUhDcW56RnBCS2NWRExnRGNuSE5zTUV3TVVNdFdFbGRHUjM1RncKMFJxeFdzZ1JBb0dCQU5GdDdQVXU0dmRvKzRCOTZwbUVFZnV2T3Rocm1vb2wyWjY1QTIybVFMODNmNFRXcmJXSApIWkhVam9mNnIya0JpZVVzUTIzM0JIUEQ2OThYcFZ6cUgrdnhILzF2TEJNVXJlRWdBMVVvN3BVbTVnZlU3b1N1CjZQSWtQZStOTnhTTitqWUFFNFAvY2N3Yk01ZnRmMFpwSUpVRlpZWWNDc1lIL1BaSnhZUFZCSEJYQW9HQkFPQ2MKbzRMWXkyMUJaR1J6Y1lDeHBkZ281MXUvWklsME10MEZlTkE4SXFkNXdyMytNeVhBNkNZbS9GOXBmNEt4RUpacgpEckRiTG1EM1JQLy9GWWY0S3hUZnVSd2lVNTVuTFhaNWlSSXBXTHkwY2E2WXpsVkt3UFQyZkZCY2UzZE5la2JKCjB0VEJIWFdIazU5RjJhOUNOaG9GeDJsaFhFT2Z6Yk5TTlZ1QkE4RjdBb0dBRUVnU2Z2RTVOZkRVZEtYVllqL3gKUWZiYWhVN0FRZk0xV3ZDWlFxSUZNSmg0OG5QYUoxMnN2OVNkakJiQ0lsQzdUclRGUFR4Ui9Vb0RBV0lPT2czOQprMU00b0hSUEllQ2VyL3pVSlgrOEpKNVVqZEZSQmNHdlhIdlMwTmZTcTJkcVIxNTBKZlBxL2VvemRhRkNIdEEzCmR6NW5LU2p1OFh4WGZ6STNCOHU4djVzQ2dZRUF3R09LN3IzUmFSRFU4L0dxSytoK1BHdTAxL0pWSkNOaW1jeGgKRWtRZ0RzR05tLzJMUS9BN0tNckY2dGZMZjE4NDdRNWdNLzVaZUhiMEpDNFMvRGNHZDhlMW43S0xXeWZYV2g1NQoyUk9QVFh0bDBINVVaZHcwOE4zYjExMlA1NzEyV2dIdlU0cmlOOVJjRHRYZXdtNTlOc2J5YW9JWmJGY0o4Mm9jCkIvZTNCdGNDZ1lFQXJBbFpmTnZBTmJHZFNZTWRWZS84VzJMR0tlbVBiZ1pLeW0ySUwwM1lDdXVUMFh4SW5BamcKL2ZGOURRZGxzS1dmLzljZTJ3QlRUcnFCZ2VOZi9rQU9pMmcwTWVZNFZXOVR2V0dSRGVzRENTMks2UlYvTitKVQpXZVgxVGZtMHQ0N3JMOElSRWpiYzJ2MWRVQnlCcmR2Szg0bGtHdDFOTUR5Zjkyek54bGlsb3ZrPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=","caCert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EVXdPREEyTXpVMU1sb1hEVE14TURVd05qQTJNelUxTWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2tECkxvdEdMSVpyaCtvTjVoYUpyNkg1STJDd3lYbHFUNkx4M29ZcFl2QkVRUzlwQXNZOGk1dzQxblFDRFNoUEs1Z04KbXpVZ0pJSWFXTU9LWGpjQkR6ZGJWL0FpME1FRmlpRWRNMzIrcDNqK2U0WHZTTDRkeHJFRFRoQzgxU01uejRjegpKOGlwVGIvVVpNNHRuditrZWxKRVdVZlpBWlgveGhqU0xhckxqQktLc1VJZktFTW9ld3FOeVRxaWU2eitPSGl1CkNEV0l0Rk5rVVY3OWZ4dWVGOE1nb2xOSEZMelhWdXNDS1IyQ284RC9VSVZ6czdsZWFoNlRrWDJqdWF1TmF2cnkKVStvVkpEcXkzSzUxbUx4SUlqNnhoeDhPRzk0U2xiT2Y5R0Q2YTB0R2trMzM5S3Q4UjcvUUw5Y0NGbHdEcmhwbwpRTVhSWGtCVFl4ejR4ZUFrRkRrQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZERm9FSFU1MEhjNmNYQlpid3dubGZ5M29zYlBNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFCSndVdHpwdGlwYmRWbU0yb0JMZk1vTzFPbzBmbGdUdUQvVFJSWUUraHRLYWM5MWFXMgp0bHVTOTEwVnZrZHMycEV1MS8xSmxDdExJM3ZhZU5yVHY0cndvM2JvbXBRRGlnRzIvbnN3SGdwYzRxZXVNTC9vCkpjUGMrQkgydGw5ZUJsdG9YNFJmaVpsL2JlOXJ4VDY2ZVhTdlZWTVdlZ20zUlJZaDZ1UmZnamZuSmdDZTBoM2cKZVZZcisyOWdscnRDK3ZCeFpHY0w5WkNKVmJPTXgwdXlkMVRmR3V3L1JIWng0NE1OeU1xSmlGSWkwWHpUUU9IVgpPYVNiOHZWc0xDZkMxTnVObVlWMDVUdjQ2RVJMdnlHZzhZZXZyMmc4YUp5MnFrVVk0MGNaZUFoV2dBYWZUZ052CjYrdFluSW4yMjVvek9vWklUWFg1UVkrL3BBcFNpQVF3VzJzNQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="},"metaData": {"description": "k8s lient authentication certificate in base64 encoding","displayName": "k8s client certificate","isRequired": true}},{"id": "nameSpace","type": "STRING","value": "test002", #批改为你本人环境中服务所在的namespace“metaData”: {“description”: “Namespace in kubernetes”,“displayName”: “Namespace Name in kubernetes”,“isRequired”: true}},{“id”: “serviceName”,“type”: “STRING”,“value”: “msda1”, #批改为你对应的Service名称"metaData": {"description": "Service name to be exposed","displayName": "Service Name in kubernetes","isRequired": true}},{"id": "poolName","type": "STRING","value": "/Common/Pool1", #你要创立的Pool的名称“metaData”: {“description”: “Pool Name to be created”,“displayName”: “BIG-IP Pool Name”,“isRequired”: true}},{“id”: “poolType”,“type”: “STRING”,“value”: “round-robin”, #你要抉择的负载平衡算法,请在上面list中抉择"metaData": {"description": "load-balancing-mode","displayName": "Load Balancing Mode","isRequired": true,"uiType": "dropdown","uiHints": {"list": {"dataList": ["round-robin","least-connections-member","least-connections-node"]}}}},{"id": "healthMonitor","type": "STRING","value": "http", #抉择你要的健康检查算法,在上面list中抉择"metaData": {"description": "Health Monitor","displayName": "Health Monitor","isRequired": true,"uiType": "dropdown","uiHints": {"list": {"dataList": ["tcp","udp","http","none"]}}}}],"dataProperties": [{"id": "pollInterval","type": "NUMBER","value": 15, #这里是你须要多久去查问一次“metaData”: {“description”: “Interval of polling from BIG-IP to registry, 30s by default.”,“displayName”: “Polling Invertal”,“isRequired”: false}}],“configurationProcessorReference”: {“link”: “https://localhost/mgmt/shared/iapp/processors/msdak8sConfig”},“auditProcessorReference”: {“link”: “https://localhost/mgmt/shared/iapp/processors/msdak8sEnforceConfiguredAudit”},“audit”: {“intervalSeconds”: 60,“policy”: “ENFORCE_CONFIGURED”},“sourcePackage”: {“packageName”: “f5-iapplx-msda-k8s-0.0.3-0003.noarch”},“configProcessorTimeoutSeconds”: 30,“statsProcessorTimeoutSeconds”: 15,“configProcessorAffinity”: {“processorPolicy”: “LOAD_BALANCED”,“affinityProcessorReference”: {“link”: “https://localhost/mgmt/shared/iapp/processors/affinity/load-balanced”}},“state”: “BINDING”, #如果你应用的是默认的模版,这里状态改为BINDING"generation": 10,"lastUpdateMicros": 1656552937409259,"kind": "shared:iapp:blocks:blockstate","selfLink": "https://localhost/mgmt/shared/iapp/blocks/b4d1b6ea-30cb-35f9-8704-de9c712d522e"2F5上创立了一个新的Pool外面并没有Member(初始状态)3确认K8S Service和Endpoint状态4察看Pool外面曾经主动增加了对应的成员5当pool成员发生变化时,会主动增加或者删除池成员扩大deployment池成员主动被增加6应用AS3将业务公布
...