赞
踩
在WIN10系统中按下win+r,输入services.msc,找到OpenSSH SSH Server,启动它。
然后再自己起个名字就结束了。
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:这里每个人都不同 Please contact your system administrator. Add correct host key in /Users/Anan/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/Anan/.ssh/known_hosts:1 RSA host key for 这里是服务器的IP has changed and you have requested strict checking. Host key verification failed.
会出现这些信息是因为,第一次SSH连接时,会生成一个认证,储存在客户端(也就是用SSH连线其他电脑的那个,自己操作的那个)中的known_hosts,但是如果服务器验证过了,认证资讯当然也会更改,服务器端与客户端不同时,就会跳出错误啦~因此,只要把电脑中的认证资讯删除,连线时重新生成,就一切完美啦~要删除很简单,只要在客户端输入一个指令
ssh-keygen -R +输入服务器的IP
接下來再次连接一次,會出現
Are you sure you want to continue connecting (yes/no)?
输入yes,
就完成连接啦!同時,新的认证也生成了
apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1ESXlNakV4TXpFek1sb1hEVE16TURJeE9URXhNekV6TWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTll2CkhNeEx5OVBpSUJSYjJGZ2ZPeCttR3Rpbm1tV0d2Tndkb2I3bGpJRVQ5cmVmam1KS1d0M0lVRGJlN1dFVGxlOCsKUTM0NmZpQ0pqbllpazIxeXpoMGR6eThBSkk1Zkp0VW5ZR3ZUQXp4Q00yV1dUdEIxakR0OU1mUWpra3VnbTE0cApHQms2TFZzc0x5d1VSSkgzZm1Yc0VNamROZzVmWEdzWHZGVnJwSS9GSHl4UDJjRDFVaVpwVVMwdHpDcDRPZjhEClV2aE5EVDVRYVBIM1ZZNFJqMW9HZHZwRkxybW5xVUhwd2l5UEliUDJYaVEwY1p2bkNNSFBUSHU0cU91MUdiUWcKZ013U2xvUGkzT1hPclFwYjdaMFhYWlpReTAySUhTaWFMRVk2eTNEKzJVMUNRMnNxVDhWNk03NTJqbkZqalgvZwpEV2FOTTFVVTFSaW1nR0pHL1I4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZLa2kvWmFvcFJjV2Q3Y0tFTEsveHRjYlZGVWtNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQ0FRakRNM1JpU09IWE5TUXlldwpIeDBDMjFWaW9EdmF3MmlnWTNlMk5oM0JEQUlDK2lFeEp5NW5hNmFPTkN3ZlFKSmVidGhSeHNJSmlpdTlqaEZ1Ckt3ZkRuMDdDZHBiMk12d0Z4Y2MycFZndjBJd1d3Tk90OXU2TnAydjRoZ0Q0Z1lBWTlEQUN3anU5WldPWVMwS3kKVis3WDhhTk5LMk5kMVdPbmVOSTZSdFU1T2VhaVJMT0tvNGpuK3JOUnJrUSswUThNeWxxc0RZLzY1VGdHOXpJSQpDUUtRU2ZkeisrWmNPSnc3dDY2ZXdwZUJ6UVJGNmpXNDI3aVNnL21PVFVGdHNJd1gvenJvZ0Z4QWlUYzFZSW1LCmpUeG5vWjFUamc2OEZkNitHNXdJRG1pbEpIQ25mOC9NSElZTlBld2dmSXk3bkFqQWh5dkxLbnUxT3RDL2FMc3cKVldVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://192.168.1.105:6443 name: kubernetes contexts: - context: cluster: kubernetes user: hjw name: hjw - context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes current-context: hjw kind: Config preferences: {} users: - name: hjw user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNxakNDQVpJQ0ZFdkRsY24vQWJqcit1OEJoRDQ2SkFnUGVJdUtNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1CVXgKRXpBUkJnTlZCQU1UQ210MVltVnlibVYwWlhNd0hoY05Nak13TlRFNU1UTTBNakUxV2hjTk1qUXdOVEU0TVRNMApNakUxV2pBT01Rd3dDZ1lEVlFRRERBTm9hbmN3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUNtQWdSVEt3dmswc0NSOHRCZEpvYkpSelBJTFBjVFMrbkYvNENzdTc5UW56cVpTeStrS2Zla3R2UXgKZk1NMXBXYStuTG5QMEpaQ1VnMFcrYnIySzZ6OE9EM0pKcHpodC9oQTZXclhsRDZaY0lDeEd0bzZxY0JJQ3hHMgozRlNubEhrZkdTWG5iK24rc0dqaStwTTBmTjNzc2VvRks5cnNCTS9QRWpSS0V2cldOUUx6WFAzUWdLc0NuYjZWCjMwWTI5ZThlUnpOMC9uSytnWHJaTjU3Ym4weDRSbTFLWFVhcjlEeDJ5b1JHdElnK0pBTDVScDUrR3FXczZOZ2MKRHZHTVFvTVpwMUhOQ0h6N0xUVkdJVGVtQ2xaSTdnVmxmUk1UV3VCWE11WTByMGVpWWZZYlgrSzhTNXNHWTFjSAp0RXZaRTBRQlhKZUNOb0xHNVZyc2xmRnlOOUVEQWdNQkFBRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBTVpICm9GTEc0aHFoVStDR0JjQWd5dFJtQ2hGT3dqalRyMGduYzdwK2N6T0lCbnZqWGluNVRsSEFTSS9qRHAxYloxdnMKQVoydk41QUFUbWREUVptK2lHV3FVUnlUbDM0LzJlWWFjTCtLcFozN1pObnk1Wk9YZ2k0WFhOT0pPZW5NRzNBNgpxMHpzUkZ1MFFvNWRFSnVXUUhsaE50dXAzdVIwU0xQVVFtei9xMnFwMlRRdmlVVFF2SnlRaERYWlFEZ0VtRXY5ClRLUVlEQWlqNWdNT3ZWR3pKalZaejIwRVhhU3N3djZlNE50MEozNUJqZmZpNEthckJrR3hmVWRYa3YwZGdTeEMKMEs4NE5KdUdJTWVCdUpwTmRwQnVrc3VWQ1Y0SkJhVDF0aWVWN2JSTG9Lb2tsbUtSMmFjZUtQbVA2NHRxVTY4bwo1OC8vckFxR2dkYWwyeHYrVTlRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBcGdJRVV5c0w1TkxBa2ZMUVhTYUd5VWN6eUN6M0UwdnB4ZitBckx1L1VKODZtVXN2CnBDbjNwTGIwTVh6RE5hVm12cHk1ejlDV1FsSU5Gdm02OWl1cy9EZzl5U2FjNGJmNFFPbHExNVErbVhDQXNScmEKT3FuQVNBc1J0dHhVcDVSNUh4a2w1Mi9wL3JCbzR2cVROSHpkN0xIcUJTdmE3QVRQenhJMFNoTDYxalVDODF6OQowSUNyQXAyK2xkOUdOdlh2SGtjemRQNXl2b0Y2MlRlZTI1OU1lRVp0U2wxR3EvUThkc3FFUnJTSVBpUUMrVWFlCmZocWxyT2pZSEE3eGpFS0RHYWRSelFoOCt5MDFSaUUzcGdwV1NPNEZaWDBURTFyZ1Z6TG1OSzlIb21IMkcxL2kKdkV1YkJtTlhCN1JMMlJORUFWeVhnamFDeHVWYTdKWHhjamZSQXdJREFRQUJBb0lCQVFDRG56SENwMnpFdnYwRQpPeHRONEJBYVlxUUI0UFQ5amNFS3hleEdDSTVGNUJuWUZTN3U0SCtEVDdRSjBMd09PdGhkNVhIRi9jSkZUejBsCnJGZTZleUtxMEFUZENncDFSU0pHaFV1N0pjVUViNWo1MHlxWVBLTkIrOVROd2FBMVJwbEtPT3crdGhNM1pyT2kKMDc0SGJjR2Z1K2lxdFB6ZENXdWk2UElna1Mva3lkaG1YV0hYUlNGcTF6VC83d1d3ODRzajMxZ2NtejdxMXVWUgpYOGVZd3NRc1lCMGwzNGFKWW12TmlJa3BZTnFybmtYZmxyc3Z5Y0lYYWdVUzFkZGpsYkVGcW9iUFBseGxwUFhJCk56VTFmVVIyaGZtYkZBZGRZb1lrcEtZS213TmpRczdhbmZiMjMvK0I1YkM0RTBaZy9vZm16bDJxOTgrZlhyY1IKem5VY0hhMHhBb0dCQU05S1RxTW9YQ0RqS21TNmp5eTN1S0NkcG1udDgzdWNLaVAzRFJlQlQ4cWF5S3VhV3JJbQp4RnlCV2ZETFZnbHBNcDlLWVRZMy84VHdtQXhjZVByS1RUVVk0cVA0bUFsYnBLOUtDV0dCdi9YTlpyMGhBZXV0CnNrRmxKa2pSbmkydDBweTFyYlk4b3Q5VlhQQ3U0OHlmVUQvVm9GQ0N1UkFsQXZDbTNNcFhnUEcxQW9HQkFNMEUKVnEvRVVZdlk2czNUTnB4ZWtjeDRlaHBmNFFDVlJZaWFKd1FpQzg5bFIyWGlSMUNzNlRodXAyK24wVWxxR1M0RApQT1EwNzVBb3NTM1REN1g1aEJZdjJZNVI1L2I2Ykg1UUl5a3NLNzQzOFM5OXNRS1pBOURsY1dRN09YaDZLUjYrCk9XN1JSUXQrak5zS2xyUnVzd29pcU1GbzFiWVNuL1pCb3UzTjVNclhBb0dBTVdJVmU5ODRtNGtpNTE1ZWo1dXgKTzJwelk5Y1JZNGhmcmJQRWhhNEQwVk93ck5rWDlFc3lDb3V5WHFCQ2ZmbDIydVlBWk1kUWdwMkN5NmNZRno4cwp4NUtISStNc2JVWk01SW14MUczeHltQkZzcGJ6ZXk4bFFWa1VsdEtCYVlaNG4yYlUzSTV6aXRzdVNoU1FKb1pwCnV0dHMxdUZkcjAveDlGejhTcVF3RHVVQ2dZQXhkR2Q0MU5HYSs0T0FqUCt5YnJtYTZrRUNGYmpRRERJT3hxaTgKdlgyOTFMK0pXekU2eThzaWVzYlhEMU5UODAwSnBXeE4zRnNobWo5TFA0dWRxUWZzMWpRVHVieEwvcEtuVWF0NQpwaGNUTnFsdWZGSnp2dmVGcjZOUHUxMmNxMU02QUVjWWJWRExlZ1orWENxSWNkK3NoVG5TRmZqZmg5U2djYXJjCjFIcnBWd0tCZ0FVUGU5TTdCRW1wenlrMHlsV1pQWU4vV0dsRFc4ekl1TmRKNmlwNVUwd2UvbVZFQnJDZ0k5RXcKWEoxa3IycTVscnBWUGdFUzgwU3ZVZ0x6dkpqL1ZCUU5GTlMrWUJRYlB4WFc2d0Y5R2JZNmpDMG90UVoyUklYeAppODByTTBxM3lyOEZsNVc1TVJINURZRkRNVDllV2J0RDU1VHhCbTBGSjNmVitpK2ZIZmZQCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== - name: kubernetes-admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJVm9PMDRzTW5oUkV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBeU1qSXhNVE14TXpKYUZ3MHlOREF5TWpJeE1UTXhNelJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXRvc1A0WmRFZW1aRSszNmQKQVdsanlEUld0U1hSTlRkMEpRREpSWUhZMUFMU0JLT0NUWVBoblRjQ2Qrb05ERENPM1JqYXhhZnM4aFFSNDRZYwpkZmhYZTR2L2Zid1FYVHZSeFZFaUNkZkt4UzhzakppZ3ZFTGp5VU5YUTdYb3NCR1VaaDFzQ3dxQkxxNjc0czJRCkR4aFJmYnBUY3pKVjh4S096UTFFcmN3RExLOWhWRTFhYW81WENtQXVaUnY3YXowL0FZV1hwWnpwTUlKS0NObCsKbms4VUpoZExvZU1oYjVuSkJZeS8rMTcwc3ZoRkFqSWpJYklwM2g5bkd5U1RtMEZpOHlTVk9nYm83TEFWek9yZgpJTlh4WElmWTAyeU5ldndtdmhuMUdGaHBNUkcydE1VYzF3YlRya0M2TllaNFRDYWhTQm9SQmRqV1FDUVIvWnVDCkMzQW56d0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTcEl2MldxS1VYRm5lM0NoQ3l2OGJYRzFSVgpKREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBV2p0VnU5VStsVjN6TDNTV0NYVzFzMEU1anJZZDFTeFdUV2NTCnAwRlBjL0NaNDdXNjluaFJVVVMxOHplOVgrTnE4c2x6TXhVVmRJZEZhT2xDUDV3eFNiOXQxemkvNGRLdTFSNysKZkVXZUlUb2psRVJFRTNTM1k2K3AvbEpvUy9Nais2Uno1NWsyalhVYmFQZDFNN08wTy91MTduQUx6bXAxT2pYRAorenhoeEFpdU5pUzBzdlR5OXhIWitsS2NPV1RCL0E0b3FkWm1uL2lGQnRJVm4wRDl2TU9EaXF3VVBQUFdqRzJ3Cll1dUlWeWFBL0wvWlVCcURKVm0rRU1odzBHZHFmUHZyMmRvczIyb0RBMjFZTmdRcEx2NlZyaE9TMkY0V2FDZ2YKa3VVeVVET2NIekVkdnpzOHRUWGw5bGpVbEpLVXhFSXJUOEp5Mi9iamtJekMzd2RWc2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdG9zUDRaZEVlbVpFKzM2ZEFXbGp5RFJXdFNYUk5UZDBKUURKUllIWTFBTFNCS09DClRZUGhuVGNDZCtvTkREQ08zUmpheGFmczhoUVI0NFljZGZoWGU0di9mYndRWFR2UnhWRWlDZGZLeFM4c2pKaWcKdkVManlVTlhRN1hvc0JHVVpoMXNDd3FCTHE2NzRzMlFEeGhSZmJwVGN6SlY4eEtPelExRXJjd0RMSzloVkUxYQphbzVYQ21BdVpSdjdhejAvQVlXWHBaenBNSUpLQ05sK25rOFVKaGRMb2VNaGI1bkpCWXkvKzE3MHN2aEZBaklqCkliSXAzaDluR3lTVG0wRmk4eVNWT2dibzdMQVZ6T3JmSU5YeFhJZlkwMnlOZXZ3bXZobjFHRmhwTVJHMnRNVWMKMXdiVHJrQzZOWVo0VENhaFNCb1JCZGpXUUNRUi9adUNDM0FuendJREFRQUJBb0lCQUdHQnNLOEEvVHdnYXRLbwpGRGZQMHRQN1dTR1VITWMvWXRQdE1wWGxRU3dtZ1lhbXpKQ1pWS2VFM2RXdCtPQTlBK01JUnJ2ejhqWnhFQWtuCjl3WHc3Tkg2dXpPdmhGSTVCTmxRZUUwbnJwRmJuSUZSZWZKMkRIVFNlc2VaWUx6RDl6QUFvVmpZZUo2MkNYaWgKODBTTTZlS3Q1NnVPQktrOWpYZnNrWFlBbHVXRHRoRm11eFNnclFSQnZzZlRuVmM3ZDEzZ2VJM1BrREZDNHVGZgpmQWFUczZXaVRGZEdHakJMc2diRlVTTnZCM3cyakRBYU1WSUlQTm96VklVRndYQzV1YndGbXZVNzlDWTBNRGlwCmx5Q3FoTVlKY2RjVE1DL0hGaTdWOHh6MCtGRDV3ZEdMSzFFNDdtSTErVlF0UlZKL1M4eVRUNFZwamNEM1dJR3YKcEtMa1luRUNnWUVBMjZPTmxxdG1sc280cmdvTmRhVU0xSEVsQytZSFpva05HaDBYbUc4TXhQNE8zM2RMSzZaaQpRb1EyQ0I4cWNPSFoxcEs5eVdKV0wxYkJST2p4ZXpyYTJsWmN6ZDRJaEc2Tk5uSnpTSzFYVk1tWHRKaWJ1M0Y0CktVS3Y2V2x1VmRrTTh3bk9CMSthVTMxb0lsZW1lVGJqT2NFR0RIYlNCeGpvVERtU0cxVldzU2NDZ1lFQTFNTmUKZHNpdmgrQmxCaDRmbHVia3UwSXE3TlRUc1BldnFOUkpzK0wxZ2gvU0xScU5weWZXbnU4WUtqd0x0NTUvMERYYgpIVldwdU5zK2xLN2QyS1JNZ3VHS1ZpaDBIbTlKNlp0b0NPeVk5cnl0bE1OUzc0UHg0emNKMHVvY2JmNTFPdEErCi9BdFV4K1JaOEVGMDVYOUhzOEhvdDhhdE4vVHpKVG9sSVF1akxSa0NnWUVBenhXcTVyZGVkNmZjdndOTlkzR2wKNGh0M3dYczEyUkE1SVRqeXlVOVM2OTFhYW9uUWZ5eFdFcjhUTHA4cjVkaWNDanE2NUVocVdDSGxBYkxjRThNUApHN00zdHdhMFl5RFUxZFFkTEJYN2REN0tZWVZOdC9LcFI4WFBsRFJLeW5obVJEUW5aRDVZaElXR0RITTF5NjNiCm1kV0xmVzcrWWFDelRVTXVwY1RWZ3hzQ2dZRUFnRGpkalNpVTRJWlRXOFI3dFMyaFcxa2RGVzJOeG5EKzQvaE0KRXFVTTRFYmRHMkdOVE5ldGVFc1BmU1NDeXo0eU9RQzc5SW5UcHh3Nk10RFAwZWZ5VkU0b1dKUTRwcjdiQkhZcgoxSFVDR25ETEM0UkxUeDF0Z1VtQ0dpSU0wQjB4K1NmWFRYNW1zYkRrb3U1UHpKOVFUdnpsaXh1bytMZ2VjS2tDCkIxQkVIc0VDZ1lCRWRXOWw4N01IVE1mcDBpWUsweXVPN0lkV3B4TDl1VDRPeUtZaWYxK3pOT1hqRjNySlVnamkKMWU0NGN0YUh1cVVFY2diWDcyMmdQZy9TLzlteXdOMUZjaGFCcW1GMzZZVnZJaVpOTGJiMTFJZHp3bXJyY3lVbApCTHV5ZVB0aVBTeGFNQjN4T2VGMVV6ZnNTMCsrQnpTTStFcFBWcEpRN1BHS1JrbXpqcWVhMHc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
其中apiVersion和kind标识客户端解析器的版本和模式,不应手动编辑。preferences指定当前可选(和当前未使用)的kubectl首选项。
cluster中包含k8s集群的端点数据,包括集群的证书颁发机构以及完整的URL。可以使用Kubectl config set-cluster添加或修改cluster条目。多个集群的话直接在后面添加-cluster部分即可。
current-context 是作为cluster、user、namespace元组的 key,当 kubectl 从该文件中加载配置的时候会被默认使用。
可以在 kubectl 命令行里覆盖这些值,通过分别传入–context=CONTEXT、 --cluster=CLUSTER、–user=USER 和 --namespace=NAMESPACE。
若不指定 context 则默认使用 cluster1-context。可以使用kubectl config use-context 更改 current-context。
users 定义用于向 k8s 集群进行身份验证的客户端凭据。可用凭证有 client-certificate、client-key、token 和 username/password。username/password 和 token 是二者只能选择一个,但 client-certificate和 client-key 可以分别与它们组合。
可以使用kubectl config set-credentials添加或者修改 user 条目。
kubectl 可以快速生成 kubeconfig,以下是一个示例:
若使用手写 kubeconfig 的方式,推荐一个工具 kubeval,可以校验 kubernetes yaml 或 json 格式的配置文件是否正确。
kubectl 作为操作 k8s 的一个客户端工具,只要为 kubectl 提供连接 apiserver 的配置(kubeconfig),kubectl 可以在任何地方操作该集群。若要使用多个集群, kubeconfig 文件中配置多个集群,kubectl 可以在多个集群间切换。如第一部分的示例文件中就设置了2个集群。
kubectl加载配置文件的顺序:
#设置KUBECONFIG的环境变量
export KUBECONFIG=/etc/kubernetes/kubeconfig/kubelet.kubeconfig
#指定kubeconfig文件
kubectl get node --kubeconfig=/etc/kubernetes/kubeconfig/kubelet.kubeconfig
#使用不同的 context在多个集群之间切换
kubectl get node --kubeconfig=./kubeconfig --context=cluster1-context
在k8s中授权有ABAC(基于属性的访问控制)、RBAC(基于角色的访问控制)、Webhook、Node、AlwaysDeny(一直拒绝)和AlwaysAllow(一直允许)这6种模式。从1.6版本起,Kubernetes 默认启用RBAC访问控制策略。从1.8开始,RBAC已作为稳定的功能。通过设置–authorization-mode=RBAC,启用RABC。在RABC API中,通过如下的步骤进行授权:1)定义角色:在定义角色时会指定此角色对于资源的访问控制的规则;2)绑定角色:将主体与角色进行绑定,对用户进行访问授权。
1、 角色和集群角色
在RBAC API中,角色包含代表权限集合的规则。在这里,权限只有被授予,而没有被拒绝的设置。在Kubernetes中有两类角色,即普通角色和集群角色。可以通过Role定义在一个命名空间中的角色,或者可以使用ClusterRole定义集群范围的角色。一个角色只能被用来授予访问单一命令空间中的资源。
集群角色(ClusterRole)能够被授予如下资源的权限:
集群范围的资源(类似于Node)
非资源端点(类似于”/healthz”)
集群中所有命名空间的资源(类似Pod)
2、角色绑定和集群角色绑定
角色绑定用于将角色与一个或一组用户进行绑定,从而实现将对用户进行授权的目的。主体分为用户、组和服务帐户。角色绑定也分为角色普通角色绑定和集群角色绑定。角色绑定只能引用同一个命名空间下的角色。
角色绑定也可以通过引用集群角色授予访问权限,当主体对资源的访问仅限与本命名空间,这就允许管理员定义整个集群的公共角色集合,然后在多个命名空间中进行复用。
集群角色可以被用来在集群层面和整个命名空间进行授权。
3、资源
在Kubernets中,主要的资源包括:Pods、Nodes、Services、Deployment、Replicasets、Statefulsets、Namespace、Persistents、Secrets和ConfigMaps等。另外,有些资源下面存在子资源,例如:Pod下就存在log子资源
4、主体
RBAC授权中的主体可以是组,用户或者服务帐户。用户通过字符串表示,比如“alice”、 “bob@example.com”等,具体的形式取决于管理员在认证模块中所配置的用户名。system:被保留作为用来Kubernetes系统使用,因此不能作为用户的前缀。组也有认证模块提供,格式与用户类似。
角色
• Role:授权特定命名空间的访问权限
• ClusterRole:授权 所有命名空间 的访问权限
角色绑定
• RoleBinding:将角色绑定到主体(即subject)
• ClusterRoleBinding:将 集群角色绑定到主体
主体(subject)
• User:用户
• Group:用户组
• ServiceAccount:服务账号
可以参考这篇博客https://www.jianshu.com/p/2a63a8452741
K8s的用户分两种,一种是普通用户,一种是ServiceAccount(服务账户)。
1、普通用户
普通用户是假定被外部或独立服务管理的。管理员分配私钥。平时常用的kubectl命令都是普通用户执行的。
如果是用户需求权限,则将Role与User(或Group)绑定(这需要创建User/Group),是给用户使用的。
2、ServiceAccount(服务账户)
ServiceAccount(服务帐户)是由Kubernetes API管理的用户。它们绑定到特定的命名空间,并由API服务器自动创建或通过API调用手动创建。服务帐户与存储为Secrets的一组证书相关联,这些凭据被挂载到pod中,以便集群进程与Kubernetes API通信。(登录dashboard时我们使用的就是ServiceAccount)
如果是程序需求权限,将Role与ServiceAccount指定(这需要创建ServiceAccount并且在deployment中指定ServiceAccount),是给程序使用的。
相当于Role是一个类,用作权限申明,User/Group/ServiceAccount将成为类的实例。
工作流程图如下:
k8s预定好了四个集群角色供用户使用,使用kubectl get clusterrole查看,其中systemd:开头的为系统内部使用。(以system开头的是绝对不能删除的,删除了可能导致集群异常)
内置集群角色 描述
root@master-node:~/.kube# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange namespaces ns v1 false Namespace nodes no v1 false Node persistentvolumeclaims pvc v1 true PersistentVolumeClaim persistentvolumes pv v1 false PersistentVolume pods po v1 true Pod podtemplates v1 true PodTemplate replicationcontrollers rc v1 true ReplicationController resourcequotas quota v1 true ResourceQuota secrets v1 true Secret serviceaccounts sa v1 true ServiceAccount services svc v1 true Service mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition apiservices apiregistration.k8s.io/v1 false APIService controllerrevisions apps/v1 true ControllerRevision daemonsets ds apps/v1 true DaemonSet deployments deploy apps/v1 true Deployment replicasets rs apps/v1 true ReplicaSet statefulsets sts apps/v1 true StatefulSet tokenreviews authentication.k8s.io/v1 false TokenReview localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler cronjobs cj batch/v1 true CronJob jobs batch/v1 true Job certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest leases coordination.k8s.io/v1 true Lease bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration bgppeers crd.projectcalico.org/v1 false BGPPeer blockaffinities crd.projectcalico.org/v1 false BlockAffinity caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus clusterinformations crd.projectcalico.org/v1 false ClusterInformation felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet hostendpoints crd.projectcalico.org/v1 false HostEndpoint ipamblocks crd.projectcalico.org/v1 false IPAMBlock ipamconfigs crd.projectcalico.org/v1 false IPAMConfig ipamhandles crd.projectcalico.org/v1 false IPAMHandle ippools crd.projectcalico.org/v1 false IPPool ipreservations crd.projectcalico.org/v1 false IPReservation kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration networkpolicies crd.projectcalico.org/v1 true NetworkPolicy networksets crd.projectcalico.org/v1 true NetworkSet endpointslices discovery.k8s.io/v1 true EndpointSlice events ev events.k8s.io/v1 true Event flowschemas flowcontrol.apiserver.k8s.io/v1beta3 false FlowSchema prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta3 false PriorityLevelConfiguration ingressclasses networking.k8s.io/v1 false IngressClass ingresses ing networking.k8s.io/v1 true Ingress networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy runtimeclasses node.k8s.io/v1 false RuntimeClass poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding clusterroles rbac.authorization.k8s.io/v1 false ClusterRole rolebindings rbac.authorization.k8s.io/v1 true RoleBinding roles rbac.authorization.k8s.io/v1 true Role priorityclasses pc scheduling.k8s.io/v1 false PriorityClass csidrivers storage.k8s.io/v1 false CSIDriver csinodes storage.k8s.io/v1 false CSINode csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity storageclasses sc storage.k8s.io/v1 false StorageClass volumeattachments storage.k8s.io/v1 false VolumeAttachment
上面这些角色,如果有需要就不要再去自己去创建角色,直接拿来使用即可。
需要创建role和rolebinding,role是权限的集合,rolebinding是要将role里面权限绑定到指定的用户,也就是我们上面的lulei用户
比较常见的授权维度:
user:用户名
group:用户分组
资源,例如pod、deployment
资源操作方法:get,list,create,update,patch,watch,delete
命名空间
API组
可以通过kubectl api-resources查看k8s当中所有资源,并且资源属于哪个组
root@master-node:~/.kube# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange namespaces ns v1 false Namespace nodes no v1 false Node persistentvolumeclaims pvc v1 true PersistentVolumeClaim persistentvolumes pv v1 false PersistentVolume pods po v1 true Pod podtemplates v1 true PodTemplate replicationcontrollers rc v1 true ReplicationController resourcequotas quota v1 true ResourceQuota secrets v1 true Secret serviceaccounts sa v1 true ServiceAccount services svc v1 true Service mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition apiservices apiregistration.k8s.io/v1 false APIService controllerrevisions apps/v1 true ControllerRevision daemonsets ds apps/v1 true DaemonSet deployments deploy apps/v1 true Deployment replicasets rs apps/v1 true ReplicaSet statefulsets sts apps/v1 true StatefulSet tokenreviews authentication.k8s.io/v1 false TokenReview localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler cronjobs cj batch/v1 true CronJob jobs batch/v1 true Job certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest leases coordination.k8s.io/v1 true Lease bgpconfigurations crd.projectcalico.org/v1 false BGPConfiguration bgppeers crd.projectcalico.org/v1 false BGPPeer blockaffinities crd.projectcalico.org/v1 false BlockAffinity caliconodestatuses crd.projectcalico.org/v1 false CalicoNodeStatus clusterinformations crd.projectcalico.org/v1 false ClusterInformation felixconfigurations crd.projectcalico.org/v1 false FelixConfiguration globalnetworkpolicies crd.projectcalico.org/v1 false GlobalNetworkPolicy globalnetworksets crd.projectcalico.org/v1 false GlobalNetworkSet hostendpoints crd.projectcalico.org/v1 false HostEndpoint ipamblocks crd.projectcalico.org/v1 false IPAMBlock ipamconfigs crd.projectcalico.org/v1 false IPAMConfig ipamhandles crd.projectcalico.org/v1 false IPAMHandle ippools crd.projectcalico.org/v1 false IPPool ipreservations crd.projectcalico.org/v1 false IPReservation kubecontrollersconfigurations crd.projectcalico.org/v1 false KubeControllersConfiguration networkpolicies crd.projectcalico.org/v1 true NetworkPolicy networksets crd.projectcalico.org/v1 true NetworkSet endpointslices discovery.k8s.io/v1 true EndpointSlice events ev events.k8s.io/v1 true Event flowschemas flowcontrol.apiserver.k8s.io/v1beta3 false FlowSchema prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta3 false PriorityLevelConfiguration ingressclasses networking.k8s.io/v1 false IngressClass ingresses ing networking.k8s.io/v1 true Ingress networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy runtimeclasses node.k8s.io/v1 false RuntimeClass poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding clusterroles rbac.authorization.k8s.io/v1 false ClusterRole rolebindings rbac.authorization.k8s.io/v1 true RoleBinding roles rbac.authorization.k8s.io/v1 true Role priorityclasses pc scheduling.k8s.io/v1 false PriorityClass csidrivers storage.k8s.io/v1 false CSIDriver csinodes storage.k8s.io/v1 false CSINode csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity storageclasses sc storage.k8s.io/v1 false StorageClass volumeattachments storage.k8s.io/v1 false VolumeAttachment
借鉴别人的方法,创建rbac.yaml然后应用:
[root@k8s-master rbac]# cat rbac.yaml kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: pod-reader rules: #配置授权维度 - apiGroups: ["","apps"] #里面为空,为核心的api组,常用的资源都在核心组里面 resources: ["pods"] verbs: ["get", "watch", "list"] #资源操作方法 --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: read-pods namespace: default subjects: - kind: User name: lulei apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io [root@k8s-master rbac]# kubectl apply -f rbac.yaml role.rbac.authorization.k8s.io/pod-reader created rolebinding.rbac.authorization.k8s.io/read-pods created
当使用kucetl调用其api或者使用ui其实都是向api server组件发送的请求。
提取出证书里面的CN字段,该字段作为你的用户名。也就是从证书当中提取出用户名 “CN”: “hjw”,
使用 ClusterRoleBinding 可以对整个集群中的所有命名空间资源权限进行授权;以下 ClusterRoleBinding 样例展示了授权 manager 组内所有用户在全部命名空间中对 secrets 进行访问
去验证你的身份是不是有效的,也就是你的证书是不是CA颁发的,验证客户端证书没问题进行下一个阶段的授权,也就是创建RBAC,授权之后可以访问。
使用kubeconfig还需要注意用户已经经过授权(如RBAC授权),上述例子中用户的证书中CN字段为"CN": “lulei”,kube-apiserver 预定义的 RoleBinding read-pods 将User lulei 与 Role pod-reader 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限。
package main import ( "context" "fmt" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" ) func main() { // uses the current context in kubeconfig // path-to-kubeconfig -- for example, /root/.kube/config config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\HJW\\.kube\\config_linux") if err != nil { panic(err) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err) } stopCh := make(chan struct{}) defer close(stopCh) // sharedInformers := informers.NewSharedInformerFactory(clientset, time.Minute) // informer := sharedInformers.Core().V1().Pods().Informer() // access the API to list pods pods, err := clientset.CoreV1().Pods("default").List(context.TODO(), v1.ListOptions{}) if err != nil { panic(err) } fmt.Printf("There are %d pods in the cluster\n", len(pods.Items)) for _, d := range pods.Items { fmt.Printf("namespace:%v \t name:%v \t statu:%+v \n", d.Namespace, d.Name, d.Status.Phase) } // informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ // AddFunc: func(obj interface{}) { // mObj := obj.(v1.Object) // log.Printf("New Pod Added to Stror: %s", mObj.GetName()) // }, // UpdateFunc: func(oldObj, newObj interface{}) { // oObj := oldObj.(v1.Object) // nObj := newObj.(v1.Object) // log.Printf("%s Pod Updated to %s", oObj.GetName(), nObj.GetName()) // }, // DeleteFunc: func(obj interface{}) { // mObj := obj.(v1.Object) // log.Printf("Pod Delete from Store: %s", mObj.GetName()) // }, // }) // informer.Run(stopCh) }
这是运行结果,可以看出来已经找出了default命名空间中的pod,使用的是hjw的role。
在集群中进行求证,发现没问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。