# #kubernetes #google-cloud-platform #phpmyadmin #static-ip-address
Вопрос:
У меня есть служба phpmyadmin, работающая в кластере kubernetes. Я хочу зарезервировать внешний IP-адрес (статический) в облаке Google для использования с этой службой, чтобы он мог быть доступен из Интернета. Я попытался зарезервировать IP-адрес в GCP и использовал его в файле службы kubernetes, как показано ниже:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: /snap/kompose/19/kompose-linux-amd64 convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: phpmyadmin
name: phpmyadmin
spec:
externalIPs: [xx.xxx.xxx.xxx] #the external IP from Google cloud
ports:
- name: "8080"
port: 8080
targetPort: 80
selector:
io.kompose.service: phpmyadmin
status:
loadBalancer: {}
Когда я указываю spec.type: LoadBalancer
, тогда служба доступна из Интернета с IP-адресом по умолчанию, который генерируется из type: LoadBalancer
.
Я попытался изменить правила брандмауэра для внешнего IP-адреса, разрешив вход на порт 8080, но это не сработало.
Ответ №1:
Вместо того, чтобы устанавливать значение exteranlIPs
, вы должны установить spec.loadBalancerIP
spec.type
LoadBalancer
значение:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: /snap/kompose/19/kompose-linux-amd64 convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: phpmyadmin
name: phpmyadmin
spec:
ports:
- name: "8080"
port: 8080
targetPort: 80
selector:
io.kompose.service: phpmyadmin
type: LoadBalancer
loadBalancerIP: "YOUR_IP_ADDRESS"
status:
loadBalancer: {}
Для глобального IP-адреса вам необходимо предоставить HTTP (s) балансировщик нагрузки через Ingress
объект.
Ответ №2:
Правила брандмауэра применяются на уровне экземпляра. они не могут предотвратить попадание трафика на сам балансировщик нагрузки.
Ссылка : https://cloud.google.com/load-balancing/docs/https/#firewall_rules
Возможно, ваша служба GKE LB по умолчанию использует балансировщик нагрузки HTTP, возможно, вы можете проверить балансировщик нагрузки NLB: https://cloud.google.com/load-balancing/docs/choosing-load-balancer#summary-of-google-cloud-load-balancers
Весь порт: https://cloud.google.com/kubernetes-engine/docs/how-to/service-parameters#all_ports
apiVersion: v1
kind: Service
metadata:
name: helloworld
labels:
app: helloworld
annotations:
cloud.google.com/neg: '{"exposed_ports": {"8080":{}}}'
spec:
ports:
- name: 8080-8080
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: helloworld
# Use LoadBalancer type instead of ClusterIP
type: LoadBalancer
Пример : https://spring-gcp.saturnism.me/deployment/kubernetes/load-balancing/external-load-balancing