{ "info": { "author": "Adam Talsma", "author_email": "se-adam.talsma@ccpgames.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Flask", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7" ], "description": "# Kube-shields\n\nRedirection service to shields.io for inside a Kubernetes cluster. Uses the\nKubernetes API with the service account token and ca.crt injected to\n`/var/run/secrets/kubernetes.io/serviceaccount/` in the running container.\n\n\n# Configuration\n\n## `OTHER_SHIELDS`\n\nKube-shields can be run with public access or without. This is dictated by\nwhether or not the `OTHER_SHIELDS` environment variable is set. You can enable\npublic access to the all endpoints by setting this value to a DNS name or IP\naddress of another kube-shield in another cluster. If you only have one cluster\nand you want it to have public access, set the value to \"None\". If a kube-shields\nserver does not have the `OTHER_SHIELDS` env var set, it will only communicate\nto other kube-shields servers sharing the same secret key.\n\n## `SHIELD_SITE_NAME`\n\nThe `SHIELD_SITE_NAME` is only used for the `/` route, and thus only required\nif the `OTHER_SHIELDS` variable is also set. It will be displayed in the main\nhtml as the page title, and used for the shields' hovertext.\n\n## `INTRA_SECRET`\n\nThis must be set on all kube-shield servers. The default is to use part of the\npython package itself, which is in no way secure. You should generate a file\nto be used as your shared secret and update the `INTRA_SECRET` env var to it's\nfilepath. If your intra-shield traffic is captured unencrypted it is possible\ngiven enough time to brute force your secret key. This can be mitigated by\nusing a lengthy key and/or rotating them regularly.\n\n\n# Automatic Discovery\n\nAny Kubernetes Pod running in the same cluster as the kube-shield service and\nalso created automatically via some other object such as a ReplicationController\nor DaemonSet will be found and have a health check generated for it. The check\nis relatively simple, only returning the number of ready containers vs total,\nwith any discrepancy resulting in a red result instead of green. It also checks\neach pod to see if it has restarted more than once every other day. If so,\nthe result will be yellow.\n\n\n# Custom Checks\n\nMaking a custom check should be simple. You can create a python file with the\nname of the pod you would like to apply the check to. In that file, create all\nthe helper functions you need, but be sure to prefix them with a `_`. The\nfunctions that don't begin with an underscore will be used as custom checks for\nthat pod. The return format can either be a raw value, or you can return a dict\nwith the keys `label`, `status`, and `color`.\n\nCaveat: do not name a custom check named `health`, it will be inaccessible.\n\n\n# API\n\n## `/`\n\n`/` is available only if `OTHER_SHIELDS` is set. `/` will return HTML with a\nlist of all the service and their checks in all the clusters. There is no\ncaching anywhere in kube-shields though, keep that in mind.\n\n## `/_///`\n\nThe `_` endpoint is for retrieving a specific pod and check's result shield.\nThe automatically generated check is available under the check name `health`.\nYour custom checks are available under their function names.\n\n## `/a///`\n\nThe `a` endpoint is used to aggregate similarly named pods, as long as they have\nthe check, into the same shield result. The name section is the leading part of\npod name. For instance, the endpoint `/a/foo/health/` can be used to combine\nthe output for the pods `foo-bar`, `foo-baz`, and `foo` into a single shield.\n\n## `/services/`\n\nTypically only used with intra-shield traffic, returns a JSON list of all\ndiscovered services. Requires intra-shield authentication if `OTHER_SHIELDS`\nis not set.\n\n## `/services//`\n\nAlso typically only used in intra-shield communication, this returns a JSON\nlist of all checks available for the named service, or 404.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/ccpgames/kube_shields/", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ccpgames/kube_shields/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "kube_shields", "package_url": "https://pypi.org/project/kube_shields/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/kube_shields/", "project_urls": { "Download": "https://github.com/ccpgames/kube_shields/", "Homepage": "https://github.com/ccpgames/kube_shields/" }, "release_url": "https://pypi.org/project/kube_shields/0.0.6/", "requires_dist": [ "Flask (>=0.10.0)", "requests (>=2.9.0)", "PasteDeploy; extra == 'deploy'", "paste; extra == 'deploy'", "uwsgi; extra == 'deploy'" ], "requires_python": "", "summary": "kube shields flask frontend.", "version": "0.0.6" }, "last_serial": 2161005, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "45c6fdcb7a1c7d5e5ef4545110db19cd", "sha256": "254a4ec596417ea4cace10be6cf693ca24504a53e8a7441b3b2f9530e1a7d4ab" }, "downloads": -1, "filename": "kube_shields-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "45c6fdcb7a1c7d5e5ef4545110db19cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12694, "upload_time": "2016-02-18T22:44:38", "url": "https://files.pythonhosted.org/packages/4f/7c/4122d2493b8dc0b20e750002f2d5d695447787f3dd1f629b0acca03983ee/kube_shields-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "629093d58676e3845d0bcc41e22f7e6f", "sha256": "2349b1f5941b5db6977f03fa0406952669f1d16115d695e778d3ce1d9c2e1e4e" }, "downloads": -1, "filename": "kube_shields-0.0.1.tar.gz", "has_sig": false, "md5_digest": "629093d58676e3845d0bcc41e22f7e6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8683, "upload_time": "2016-02-18T22:44:47", "url": "https://files.pythonhosted.org/packages/17/d6/98d632ba6ad2e5e6c062c5cdd9a3b2343ba2f0e3c41fecc02d3d8ad49ff2/kube_shields-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2031307ee8b85bf71b91555cd8076658", "sha256": "5a567fdc3de6557304b3f8bac898c4bf443b2ebe2adcecd919529ccd5a4c00de" }, "downloads": -1, "filename": "kube_shields-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2031307ee8b85bf71b91555cd8076658", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12742, "upload_time": "2016-02-18T23:18:01", "url": "https://files.pythonhosted.org/packages/4d/25/a3f9d7b105986511d7768ebef79440f5a4a69c6129988e960a72765fcb8e/kube_shields-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec80d6e757407c738ef56ff7cae38695", "sha256": "68890ac44e3457f1047969eaa779e6a2ba3184bd24eb31027e4c4040d6f0c04c" }, "downloads": -1, "filename": "kube_shields-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ec80d6e757407c738ef56ff7cae38695", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8757, "upload_time": "2016-02-18T23:18:29", "url": "https://files.pythonhosted.org/packages/6f/e2/428757db67a4497fbb7def3ac0bc08e8cc42a1e2dc855d4346d40afddd7f/kube_shields-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "92e4bb514df8275178c3a75099745061", "sha256": "6f284118a3d8b9cf4703703c1080af7a0719d5d16edaecc16887be35272e67a8" }, "downloads": -1, "filename": "kube_shields-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "92e4bb514df8275178c3a75099745061", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12758, "upload_time": "2016-02-19T00:48:58", "url": "https://files.pythonhosted.org/packages/f8/c3/6ec9da863ca68c19ac6ba7d20da12a0dc1233cd162e78cb295c03dc36373/kube_shields-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41dfe8727000fce425ed277b647a1ae4", "sha256": "72e21ae7c5ef88fc49350e22f399a0b165603f8db0109ea4af86a285fb961462" }, "downloads": -1, "filename": "kube_shields-0.0.3.tar.gz", "has_sig": false, "md5_digest": "41dfe8727000fce425ed277b647a1ae4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8710, "upload_time": "2016-02-19T00:49:07", "url": "https://files.pythonhosted.org/packages/06/e7/8293bbd912291e97ee0d37070fbb3604c2688a3d544b48bb16eadaa9834f/kube_shields-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "18604346b6c7ee6a4c0590a7d0e28881", "sha256": "7da4f955e3b522845c522789926989cbbeb5442632b1839f7ddfaf3360d4e772" }, "downloads": -1, "filename": "kube_shields-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "18604346b6c7ee6a4c0590a7d0e28881", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12998, "upload_time": "2016-03-02T21:02:22", "url": "https://files.pythonhosted.org/packages/e4/ca/566869295ebabca8124a0ba021b26603a868fbf9cd18831acb8fd6a7e724/kube_shields-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c471ffee2054b8d5c3e1dffe3787d1db", "sha256": "69f012bfb7dca733174b5cdcbec02bb4c2998f889f51df1b445841f52fc4d286" }, "downloads": -1, "filename": "kube_shields-0.0.4.tar.gz", "has_sig": false, "md5_digest": "c471ffee2054b8d5c3e1dffe3787d1db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8920, "upload_time": "2016-03-02T21:02:40", "url": "https://files.pythonhosted.org/packages/e2/54/dc0829aab754a88bf61dfa01697e7097330fe3aad7ef68b3d4c80cdbaa4e/kube_shields-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "75064b38259ff8c1408ae82d3f79f81c", "sha256": "eb0329e2192111141a1742c4dbe0278db4870feda38a55d68ca4d7bfc654574e" }, "downloads": -1, "filename": "kube_shields-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "75064b38259ff8c1408ae82d3f79f81c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13714, "upload_time": "2016-03-03T19:39:29", "url": "https://files.pythonhosted.org/packages/31/e8/8b255c53aa2c4fd41690c2719d65855809ad6082b4fc66c71938ebedd50d/kube_shields-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "035288fdd52b60106ffe862b8f2923b7", "sha256": "12666dee6b493a8d87ed945104a92de1efcbfcca9fa550b07e1f1dbe691d4455" }, "downloads": -1, "filename": "kube_shields-0.0.5.tar.gz", "has_sig": false, "md5_digest": "035288fdd52b60106ffe862b8f2923b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9671, "upload_time": "2016-03-03T19:39:46", "url": "https://files.pythonhosted.org/packages/06/a8/eaa807f0f897cc9304df0a31858da959b44294a2e163df4c74073854738a/kube_shields-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "5af340645b64004659dd22efbfa226e2", "sha256": "b11f7fbeaf7b5b08c9e9180494eebf03680ce852456c5e17fe9f3fc125141508" }, "downloads": -1, "filename": "kube_shields-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "5af340645b64004659dd22efbfa226e2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13796, "upload_time": "2016-06-10T15:53:10", "url": "https://files.pythonhosted.org/packages/c6/f2/3aa6601073cd01937249595f65b764ce2f1a447367e8f37056083636ba8f/kube_shields-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a459ae0a8550e10ab2431f7eace2461", "sha256": "43c1853aad755e79582a85ec41c27c892d9b27ec5352f1930d9221e93665c3c3" }, "downloads": -1, "filename": "kube_shields-0.0.6.tar.gz", "has_sig": false, "md5_digest": "1a459ae0a8550e10ab2431f7eace2461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9765, "upload_time": "2016-06-10T15:53:24", "url": "https://files.pythonhosted.org/packages/af/87/5d28fed39d275aec64020c94c4e144acf041ef4a5afce46b1bac6f64b70c/kube_shields-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5af340645b64004659dd22efbfa226e2", "sha256": "b11f7fbeaf7b5b08c9e9180494eebf03680ce852456c5e17fe9f3fc125141508" }, "downloads": -1, "filename": "kube_shields-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "5af340645b64004659dd22efbfa226e2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13796, "upload_time": "2016-06-10T15:53:10", "url": "https://files.pythonhosted.org/packages/c6/f2/3aa6601073cd01937249595f65b764ce2f1a447367e8f37056083636ba8f/kube_shields-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a459ae0a8550e10ab2431f7eace2461", "sha256": "43c1853aad755e79582a85ec41c27c892d9b27ec5352f1930d9221e93665c3c3" }, "downloads": -1, "filename": "kube_shields-0.0.6.tar.gz", "has_sig": false, "md5_digest": "1a459ae0a8550e10ab2431f7eace2461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9765, "upload_time": "2016-06-10T15:53:24", "url": "https://files.pythonhosted.org/packages/af/87/5d28fed39d275aec64020c94c4e144acf041ef4a5afce46b1bac6f64b70c/kube_shields-0.0.6.tar.gz" } ] }