{"id":1445,"date":"2022-04-12T16:05:04","date_gmt":"2022-04-12T08:05:04","guid":{"rendered":"https:\/\/www.buyao007.icu\/?p=1445"},"modified":"2022-04-25T17:09:40","modified_gmt":"2022-04-25T09:09:40","slug":"10-k8s%e7%9a%84ingress%e6%9c%8d%e5%8a%a1","status":"publish","type":"post","link":"https:\/\/www.buyao007.icu\/?p=1445","title":{"rendered":"10.k8s\u7684ingress\u670d\u52a1"},"content":{"rendered":"\n<p>\u5b59\u5bcc\u9633\uff0c \u6c5f\u6e56\u4eba\u79f0\u6ca1\u4eba\u79f0\u3002\u591a\u5e74\u4e92\u8054\u7f51\u8fd0\u7ef4\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u66fe\u8d1f\u8d23\u8fc7\u5b59\u5e03\u65af\u5927\u89c4\u6a21\u96c6\u7fa4\u67b6\u6784\u81ea\u52a8\u5316\u8fd0\u7ef4\u7ba1\u7406\u5de5\u4f5c\u3002\u64c5\u957fWeb\u96c6\u7fa4\u67b6\u6784\u4e0e\u81ea\u52a8\u5316\u8fd0\u7ef4\uff0c\u66fe\u8d1f\u8d23\u56fd\u5185\u67d0\u5927\u578b\u535a\u5ba2\u7f51\u7ad9\u8fd0\u7ef4\u5de5\u4f5c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">1.Ingress\u63a7\u5236\u5668\u6982\u8ff0<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u4e3a\u4e86\u8ba9Ingress\u8d44\u6e90\u5de5\u4f5c\uff0c\u96c6\u7fa4\u5fc5\u987b\u6709\u4e00\u4e2a\u6b63\u5728\u8fd0\u884c\u7684Ingress\u63a7\u5236\u5668\u3002\r\n\u4e0e\u4f5c\u4e3a kube-controller-manager \u53ef\u6267\u884c\u6587\u4ef6\u7684\u4e00\u90e8\u5206\u8fd0\u884c\u7684\u5176\u4ed6\u7c7b\u578b\u7684\u63a7\u5236\u5668\u4e0d\u540c\uff0c Ingress \u63a7\u5236\u5668\u4e0d\u662f\u968f\u96c6\u7fa4\u81ea\u52a8\u542f\u52a8\u7684\u3002 \u57fa\u4e8e\u6b64\u9875\u9762\uff0c\u4f60\u53ef\u9009\u62e9\u6700\u9002\u5408\u4f60\u7684\u96c6\u7fa4\u7684 ingress \u63a7\u5236\u5668\u5b9e\u73b0\u3002\r\nKubernetes \u4f5c\u4e3a\u4e00\u4e2a\u9879\u76ee\uff0c\u76ee\u524d\u652f\u6301\u548c\u7ef4\u62a4 AWS\u3001 GCE \u548c Nginx Ingress \u63a7\u5236\u5668\u3002\r\n\u5efa\u8bae\u9605\u8bfb\uff1a\r\nhttps:&#47;&#47;kubernetes.io\/zh\/docs\/concepts\/services-networking\/ingress-controllers\/\r<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">2.\u90e8\u7f72\u4e00\u4e2aTraefik Ingress\u63a7\u5236\u5668<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5efa\u8bae\u9605\u8bfb\uff1a\r\n    https:&#47;&#47;docs.traefik.cn\/user-guide\/kubernetes\r\n###\u521b\u5efasa\u670d\u52a1\u8d26\u53f7\r\n&#91;root@k8s-master igress]# cat rbac.yaml \r\n---\r\napiVersion: v1\r\nkind: ServiceAccount\r\nmetadata:\r\n  name: traefik-ingress-controller\r\n  namespace: kube-system\r\n---\r\nkind: ClusterRole\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nmetadata:\r\n  name: traefik-ingress-controller\r\nrules:\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - services\r\n      - endpoints\r\n      - secrets\r\n    verbs:\r\n      - get\r\n      - list\r\n      - watch\r\n  - apiGroups:\r\n      - extensions\r\n    resources:\r\n      - ingresses\r\n    verbs:\r\n      - get\r\n      - list\r\n      - watch\r\n---\r\nkind: ClusterRoleBinding\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nmetadata:\r\n  name: traefik-ingress-controller\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: ClusterRole\r\n  name: traefik-ingress-controller\r\nsubjects:\r\n- kind: ServiceAccount\r\n  name: traefik-ingress-controller\r\n  namespace: kube-system\r\n###\u90e8\u7f72\u63a7\u5236\u5668\r\n&#91;root@k8s-master igress]# cat traefik.yaml \r\nkind: DaemonSet\r\napiVersion: extensions\/v1beta1\r\nmetadata:\r\n  name: traefik-ingress-controller\r\n  namespace: kube-system\r\n  labels:\r\n    k8s-app: traefik-ingress-lb\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      k8s-app: traefik-ingress-lb\r\n  template:\r\n    metadata:\r\n      labels:\r\n        k8s-app: traefik-ingress-lb\r\n        name: traefik-ingress-lb\r\n    spec:\r\n      serviceAccountName: traefik-ingress-controller\r\n      terminationGracePeriodSeconds: 60\r\n      hostNetwork: true\r\n      containers:\r\n      - image: traefik:v1.7.2\r\n        name: traefik-ingress-lb\r\n        ports:\r\n        - containerPort: 80\r\n          name: http\r\n          hostPort: 80\r\n        - containerPort: 8080\r\n          name: admin\r\n        args:\r\n        - --web\r\n        - --kubernetes\r\n        - --logLevel=INFO\r\n---\r\nkind: Service\r\napiVersion: v1\r\nmetadata:\r\n  name: traefik-ingress-service\r\n  namespace: kube-system\r\nspec:\r\n  selector:\r\n    k8s-app: traefik-ingress-lb\r\n  ports:\r\n    - protocol: TCP\r\n      port: 80\r\n      name: web\r\n    - protocol: TCP\r\n      port: 8080\r\n      name: admin\r\n  type: NodePort\r\n\u8bbf\u95ee\u4efb\u610f\u8282\u70b9\u76848080\u7aef\u53e3\r<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"449\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-89.png\" alt=\"\" class=\"wp-image-1446\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-89.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-89-300x156.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-89-768x399.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">3.Ingress\u89c4\u5219\u6982\u8ff0<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Ingress \u516c\u5f00\u4e86\u4ece\u96c6\u7fa4\u5916\u90e8\u5230\u96c6\u7fa4\u5185\u670d\u52a1\u7684 HTTP \u548c HTTPS \u8def\u7531\u3002 \u6d41\u91cf\u8def\u7531\u7531 Ingress \u8d44\u6e90\u4e0a\u5b9a\u4e49\u7684\u89c4\u5219\u63a7\u5236\u3002\n\r\u5efa\u8bae\u9605\u8bfb\uff1a\r\nhttps:&#47;&#47;kubernetes.io\/zh\/docs\/concepts\/services-networking\/ingress\/\r\n\u4e0b\u9762\u662f\u4e00\u4e2a\u5c06\u6240\u6709\u6d41\u91cf\u90fd\u53d1\u9001\u5230\u540c\u4e00 Service \u7684\u7b80\u5355 Ingress \u793a\u4f8b\uff1a\r<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"313\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-90.png\" alt=\"\" class=\"wp-image-1449\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-90.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-90-300x109.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-90-768x278.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">4.\u521b\u5efa\u4e00\u4e2aIngress\u89c4\u5219<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>###\u521b\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u89c4\u5219\r\n&#91;root@k8s-master igress]# cat ingress.yaml \r\napiVersion: extensions\/v1beta1\r\nkind: Ingress\r\nmetadata:\r\n  name: traefik-myweb\r\n  namespace: kube-system\r\n  annotations:\r\n    kubernetes.io\/ingress.class: traefik ##\u6307\u5b9aingress\u63a7\u5236\u5668\u7684\u540d\u5b57\r\nspec:\r\n  rules:\r\n  - host: nginx.sfy.com ###\u8bbf\u95ee\u7684\u57df\u540d\r\n    http:\r\n      paths:\r\n      - backend:\r\n          serviceName: kubernetes-dashboard  ###svc\u7684\u540d\u5b57\r\n          servicePort: 443 ###svc\u7684\u7aef\u53e3\r\n###\u4f1a\u53d1\u73b0\u9875\u9762\u591a\u4e86\u5982\u4e0b\u56fe\u6240\u793a\u7684\u57df\u540d\u548cpod\u7684\u5730\u5740\r<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"332\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-91.png\" alt=\"\" class=\"wp-image-1452\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-91.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-91-300x115.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-91-768x295.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">5.\u90e8\u7f72\u4e00\u4e2anginx Ingress\u63a7\u5236\u5668<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Nginx ingress\u63a7\u5236\u5668\u6ca1\u6709web\u9875\u9762\uff0c\u6240\u4ee5\u63a8\u8350\u4f7f\u7528traefik ingress\r\n\u63a8\u8350\u9605\u8bfb\uff1a\r\nhttps:&#47;&#47;kubernetes.github.io\/ingress-nginx\/deploy\/#running-on-kubernetes-versions-older-than-119\r\nhttps:\/\/github.com\/kubernetes\/ingress-nginx\/blob\/nginx-0.20.0\/deploy\/mandatory.yaml\r\n###\u7f16\u5199deployment\u6587\u4ef6\r\n&#91;root@k8s-master igress]# cat nginx-ingress-ctl.yaml \r\napiVersion: v1\r\nkind: Namespace\r\nmetadata:\r\n  name: ingress-nginx\r\n\r\n---\r\n\r\napiVersion: extensions\/v1beta1\r\nkind: Deployment\r\nmetadata:\r\n  name: default-http-backend\r\n  labels:\r\n    app.kubernetes.io\/name: default-http-backend\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n  namespace: ingress-nginx\r\nspec:\r\n  replicas: 1\r\n  selector:\r\n    matchLabels:\r\n      app.kubernetes.io\/name: default-http-backend\r\n      app.kubernetes.io\/part-of: ingress-nginx\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app.kubernetes.io\/name: default-http-backend\r\n        app.kubernetes.io\/part-of: ingress-nginx\r\n    spec:\r\n      terminationGracePeriodSeconds: 60\r\n      containers:\r\n        - name: default-http-backend\r\n          # Any image is permissible as long as:\r\n          # 1. It serves a 404 page at \/\r\n          # 2. It serves 200 on a \/healthz endpoint\r\n          image: netonline\/defaultbackend:1.4\r\n          livenessProbe:\r\n            httpGet:\r\n              path: \/healthz\r\n              port: 8080\r\n              scheme: HTTP\r\n            initialDelaySeconds: 30\r\n            timeoutSeconds: 5\r\n          ports:\r\n            - containerPort: 8080\r\n          resources:\r\n            limits:\r\n              cpu: 10m\r\n              memory: 20Mi\r\n            requests:\r\n              cpu: 10m\r\n              memory: 20Mi\r\n\r\n---\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n  name: default-http-backend\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: default-http-backend\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nspec:\r\n  ports:\r\n    - port: 80\r\n      targetPort: 8080\r\n  selector:\r\n    app.kubernetes.io\/name: default-http-backend\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n\r\n---\r\n\r\nkind: ConfigMap\r\napiVersion: v1\r\nmetadata:\r\n  name: nginx-configuration\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n\r\n---\r\n\r\nkind: ConfigMap\r\napiVersion: v1\r\nmetadata:\r\n  name: tcp-services\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n\r\n---\r\n\r\nkind: ConfigMap\r\napiVersion: v1\r\nmetadata:\r\n  name: udp-services\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n\r\n---\r\n\r\napiVersion: v1\r\nkind: ServiceAccount\r\nmetadata:\r\n  name: nginx-ingress-serviceaccount\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\n\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1beta1\r\nkind: ClusterRole\r\nmetadata:\r\n  name: nginx-ingress-clusterrole\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nrules:\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - configmaps\r\n      - endpoints\r\n      - nodes\r\n      - pods\r\n      - secrets\r\n    verbs:\r\n      - list\r\n      - watch\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - nodes\r\n    verbs:\r\n      - get\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - services\r\n    verbs:\r\n      - get\r\n      - list\r\n      - watch\r\n  - apiGroups:\r\n      - \"extensions\"\r\n    resources:\r\n      - ingresses\r\n    verbs:\r\n      - get\r\n      - list\r\n      - watch\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - events\r\n    verbs:\r\n      - create\r\n      - patch\r\n  - apiGroups:\r\n      - \"extensions\"\r\n    resources:\r\n      - ingresses\/status\r\n    verbs:\r\n      - update\r\n\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1beta1\r\nkind: Role\r\nmetadata:\r\n  name: nginx-ingress-role\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nrules:\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - configmaps\r\n      - pods\r\n      - secrets\r\n      - namespaces\r\n    verbs:\r\n      - get\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - configmaps\r\n    resourceNames:\r\n      # Defaults to \"&lt;election-id>-&lt;ingress-class>\"\r\n      # Here: \"&lt;ingress-controller-leader>-&lt;nginx>\"\r\n      # This has to be adapted if you change either parameter\r\n      # when launching the nginx-ingress-controller.\r\n      - \"ingress-controller-leader-nginx\"\r\n    verbs:\r\n      - get\r\n      - update\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - configmaps\r\n    verbs:\r\n      - create\r\n  - apiGroups:\r\n      - \"\"\r\n    resources:\r\n      - endpoints\r\n    verbs:\r\n      - get\r\n\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1beta1\r\nkind: RoleBinding\r\nmetadata:\r\n  name: nginx-ingress-role-nisa-binding\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: Role\r\n  name: nginx-ingress-role\r\nsubjects:\r\n  - kind: ServiceAccount\r\n    name: nginx-ingress-serviceaccount\r\n    namespace: ingress-nginx\r\n\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1beta1\r\nkind: ClusterRoleBinding\r\nmetadata:\r\n  name: nginx-ingress-clusterrole-nisa-binding\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: ClusterRole\r\n  name: nginx-ingress-clusterrole\r\nsubjects:\r\n  - kind: ServiceAccount\r\n    name: nginx-ingress-serviceaccount\r\n    namespace: ingress-nginx\r\n\r\n---\r\n\r\napiVersion: extensions\/v1beta1\r\nkind: Deployment\r\nmetadata:\r\n  name: nginx-ingress-controller\r\n  namespace: ingress-nginx\r\n  labels:\r\n    app.kubernetes.io\/name: ingress-nginx\r\n    app.kubernetes.io\/part-of: ingress-nginx\r\nspec:\r\n  replicas: 1\r\n  selector:\r\n    matchLabels:\r\n      app.kubernetes.io\/name: ingress-nginx\r\n      app.kubernetes.io\/part-of: ingress-nginx\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app.kubernetes.io\/name: ingress-nginx\r\n        app.kubernetes.io\/part-of: ingress-nginx\r\n      annotations:\r\n        prometheus.io\/port: \"10254\"\r\n        prometheus.io\/scrape: \"true\"\r\n    spec:\r\n      serviceAccountName: nginx-ingress-serviceaccount\r\n      hostNetwork: true\r\n      containers:\r\n        - name: nginx-ingress-controller\r\n          image: quay.mirrors.ustc.edu.cn\/kubernetes-ingress-controller\/nginx-ingress-controller:0.20.0\r\n          args:\r\n            - \/nginx-ingress-controller\r\n            - --default-backend-service=$(POD_NAMESPACE)\/default-http-backend\r\n            - --configmap=$(POD_NAMESPACE)\/nginx-configuration\r\n            - --tcp-services-configmap=$(POD_NAMESPACE)\/tcp-services\r\n            - --udp-services-configmap=$(POD_NAMESPACE)\/udp-services\r\n            - --publish-service=$(POD_NAMESPACE)\/ingress-nginx\r\n            - --annotations-prefix=nginx.ingress.kubernetes.io\r\n          securityContext:\r\n            capabilities:\r\n              drop:\r\n                - ALL\r\n              add:\r\n                - NET_BIND_SERVICE\r\n            # www-data -> 33\r\n            runAsUser: 33\r\n          env:\r\n            - name: POD_NAME\r\n              valueFrom:\r\n                fieldRef:\r\n                  fieldPath: metadata.name\r\n            - name: POD_NAMESPACE\r\n              valueFrom:\r\n                fieldRef:\r\n                  fieldPath: metadata.namespace\r\n          ports:\r\n            - name: http\r\n              containerPort: 80\r\n              hostIP: 10.0.0.11\r\n            - name: https\r\n              containerPort: 443\r\n              hostIP: 10.0.0.11\r\n          livenessProbe:\r\n            failureThreshold: 3\r\n            httpGet:\r\n              path: \/healthz\r\n              port: 10254\r\n              scheme: HTTP\r\n            initialDelaySeconds: 10\r\n            periodSeconds: 10\r\n            successThreshold: 1\r\n            timeoutSeconds: 1\r\n          readinessProbe:\r\n            failureThreshold: 3\r\n            httpGet:\r\n              path: \/healthz\r\n              port: 10254\r\n              scheme: HTTP\r\n            periodSeconds: 10\r\n            successThreshold: 1\r\n            timeoutSeconds: 1\r<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">6.nginx-ingress\u5982\u4f55\u4fdd\u8bc1pod\u83b7\u53d6\u771f\u5b9eIP<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5efa\u8bae\u9605\u8bfb\uff1a\r\nhttps:&#47;&#47;github.com\/kubernetes\/ingress-nginx\/blob\/main\/docs\/user-guide\/nginx-configuration\/configmap.md#use-forwarded-headers\r\nhttps:\/\/kubernetes.io\/zh\/docs\/concepts\/services-networking\/service-traffic-policy\/\r\n###\u9996\u5148\u4fee\u6539\u540d\u4e3anginx-configuration\u7684configmap\u8d44\u6e90\uff0c\u6dfb\u52a0\u5982\u4e0b\u51e0\u884c\u53c2\u6570\r\ndata:\r\n  compute-full-forwarded-for: \"true\"\r\n  forwarded-for-header: X-Forwarded-For\r\n  use-forwarded-headers: \"true\"\r<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"268\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-92.png\" alt=\"\" class=\"wp-image-1457\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-92.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-92-300x93.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-92-768x238.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>###\u7136\u540e\u4fee\u6539\u540e\u7aefpod\u7684svc\u8d44\u6e90\u8c03\u6574\u7f51\u7edc\u5206\u53d1\u7b56\u7565\u4e3aLocal\r\n\u56e0\u4e3a\u5982\u679c\u7b56\u7565\u662fcluster\u7684\u8bdd\uff0c\u4f1a\u9690\u85cf\u771f\u5b9e\u7684ip\uff0c\u4f46\u662fcluster\u8d1f\u8f7d\u6548\u679c\u66f4\u597d\u4e00\u70b9\r<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"309\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-93.png\" alt=\"\" class=\"wp-image-1458\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-93.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-93-300x107.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-93-768x274.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">7.Ingress\u7684https\u670d\u52a1<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u63a8\u8350\u9605\u8bfb\uff1a\r\nhttps:&#47;&#47;kubernetes.io\/zh\/docs\/concepts\/services-networking\/ingress\/\r\n###\u4e0a\u4f20\u8bc1\u4e66\u5230\u670d\u52a1\u5668\u5e76\u521b\u5efasecret\u8d44\u6e90\r\n&#91;root@k8s-master igress]# kubectl create secret tls www.buyao007.icu --key=.\/tls.key --cert=.\/tls.crt\r\n###\u7f16\u8f91ingress\u89c4\u5219\r\n&#91;root@k8s-master igress]# cat ingress.yaml \r\napiVersion: extensions\/v1beta1\r\nkind: Ingress\r\nmetadata:\r\n  name: traefik-myweb\r\nspec:\r\n  tls:\r\n  - hosts:\r\n    - www.buyao007.icu\r\n    secretName: www.buyao007.icu\r\n  rules:\r\n  - host: www.buyao007.icu\r\n    http:\r\n      paths:\r\n      - backend:\r\n          serviceName: web\r\n          servicePort: 80\r\n  tls:\r\n  - hosts:\r\n    - www.buyao007.icu\r\n    secretName: www.buyao007.icu\r<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b59\u5bcc\u9633\uff0c \u6c5f\u6e56\u4eba\u79f0\u6ca1\u4eba\u79f0\u3002\u591a\u5e74\u4e92\u8054\u7f51\u8fd0\u7ef4\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u66fe\u8d1f\u8d23\u8fc7\u5b59\u5e03\u65af\u5927\u89c4\u6a21\u96c6\u7fa4\u67b6\u6784\u81ea\u52a8\u5316\u8fd0\u7ef4\u7ba1\u7406\u5de5\u4f5c\u3002\u64c5\u957fWeb\u96c6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":246,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1445"}],"collection":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1445"}],"version-history":[{"count":6,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1445\/revisions"}],"predecessor-version":[{"id":1461,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1445\/revisions\/1461"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/media\/246"}],"wp:attachment":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}