Ram*_*Ram 4 google-cloud-platform google-kubernetes-engine kubernetes-ingress
我想为我的 GKE 工作负载创建一个内部入口。我想知道我可以使用什么注释,以便在入口中设置静态内部IP 地址/名称。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-https
namespace: istio-system
annotations:
kubernetes.io/ingress.allow-http: "false"
kubernetes.io/ingress.class: "gce-internal"
ingress.gcp.kubernetes.io/pre-shared-cert: my-cert
helm.sh/chart: {{ include "devtools.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
backend:
serviceName: istio-ingressgateway-backend
servicePort: 443
Run Code Online (Sandbox Code Playgroud)
我知道它将创建一个带有内部 IP 的入口,但是我想设置一个我已经在区域/子网中创建的静态 IP。是否可以这样做,如果是,是否有相同的注释
现在,您可以创建具有入口资源的内部IP与GKE按照本文档:
将下面的部分留给具有内部 IP 地址类型的nginx-ingress解决方案。ServiceLoadBalancer
有一个解决方法,需要使用nginx-ingress控制器和内部LoadBalancer服务。
请查看官方文档:
下面我包含了一个解决方法的示例,并解释了所采取的步骤。
LoadBalancer使用静态 IP创建内部Nginx-ingress使用LoadBalancer服务类型作为入口点nginx-ingresswith internalLoadBalancer脚步:
nginx-ingress定义nginx-ingress-controller服务是否具有所需的静态 IP 地址nginx-ingress定义默认情况下nginx-ingress,官方网站的定义会将类型的服务配置LoadBalancer为入口点。默认情况下,它将获得一个外部IP 地址。您可以修改/编辑服务定义以获得内部定义。
请下载这 YAML和编辑负责以下服务定义相关的部分:
一个提示!
nginx-ingress也可以使用 Helm! 进行部署。
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations: # ADD THIS LINE
cloud.google.com/load-balancer-type: "Internal" # ADD THIS LINE
labels:
helm.sh/chart: ingress-nginx-2.4.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.33.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
loadBalancerIP: 10.1.2.99 # ADD THIS LINE
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/component: controller
Run Code Online (Sandbox Code Playgroud)
请具体看一下metadata部分:
annotations: # ADD THIS LINE
cloud.google.com/load-balancer-type: "Internal" # ADD THIS LINE
Run Code Online (Sandbox Code Playgroud)
因为这部分将指示GCP提供一个内部IP 地址
另外请看一下:
annotations: # ADD THIS LINE
cloud.google.com/load-balancer-type: "Internal" # ADD THIS LINE
Run Code Online (Sandbox Code Playgroud)
因为这一行会告诉GCP分配提供的 IP 地址。
请记住,此地址应与您在其中创建集群的 VPC 网络兼容。
nginx-ingress-controller服务是否具有所需的静态 IP 地址应用整个定义后,nginx-ingress您应该能够运行:
kubectl get svc ingress-nginx-controller -n ingress-nginx上述命令的输出:
loadBalancerIP: 10.156.0.99 # ADD THIS LINE
Run Code Online (Sandbox Code Playgroud)
如您所见EXTERNAL-IP,实际上是internal并设置为10.156.0.99.
你应该能curl这个地址并获得default-backend的nginx-ingress-controller。
此步骤是可选的,仅显示使用提到的公开示例应用程序的过程nginx-ingress。
YAMLDeployment,Service和 的定义Ingress:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.60.6.97 10.156.0.99 80:31359/TCP,443:32413/TCP 2m59s
Run Code Online (Sandbox Code Playgroud)
应用此资源后,您应该能够:
$ curl 10.156.0.99并受到欢迎:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
spec:
selector:
matchLabels:
app: hello
replicas: 3
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:2.0"
---
apiVersion: v1
kind: Service
metadata:
name: hello-service
labels:
app: hello
spec:
type: NodePort
selector:
app: hello
ports:
- name: hello-port
port: 80
targetPort: 8080
protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host:
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: hello-port
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |